0

私はかなり長い間、このキーボードとスクロールビューの問題に苦労してきました。What'sApp や iMessage に似たチャット ルームを作ろうとしています。ルート ビュー コントローラーとして UITabBar があります。チャット ルーム ビューの場合、下部に UITextView と UIButton を含むツールバーがあります。問題は、キーボードが表示されるとコンテンツ ビューが画面の外に押し出され、上部の約 1/5 が見えないことです。コンテンツ ビュー。数字で遊んでみましたが、まだ正しく動作しません。どんな助けでも大歓迎です。

- (void)keyboardWasShown:(NSNotification *) aNotification {
   NSDictionary *info = [aNotification userInfo];
   CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
   // the hardcoded 49 is the height of the UITabBar at the bottom below the input toolbar
   UIEdgeInsets contentInsets = UIEdgeInsetsMake((-keyboardSize.height+49), 0.0, (keyboardSize.height-49), 0.0);
   self.scrollView.contentInset = contentInsets;
   self.scrollView.scrollIndicatorInsets = contentInsets;

// If active text field is hidden by keyboard, scroll it so it's visible
// Your app might not need or want this behavior.
//    CGRect aaRect = self.view.frame;
//    aaRect.size.height -= keyboardSize.height;
//    if (!CGRectContainsPoint(aaRect, self.activeTextView.frame.origin)) {
//        [self.scrollView scrollRectToVisible:self.activeTextView.frame animated:NO];
//    }

   CGPoint scrollPoint = CGPointMake(0, self.scrollView.contentInset.bottom);
   [self.scrollView setContentOffset:scrollPoint animated:true];


   [self.view addGestureRecognizer:self.tapRecognizer];

}


- (void)keyboardWillBeHidden:(NSNotification *) aNotification {
   UIEdgeInsets contentInsets = UIEdgeInsetsZero;
   self.scrollView.contentInset = contentInsets;
   self.scrollView.scrollIndicatorInsets = contentInsets;

   [self.view removeGestureRecognizer:self.tapRecognizer];
}
4

1 に答える 1

1

私はずっと前に同じ問題に遭遇しました。私の解決策は、キーボードフレームが通知を変更したことを聞くことです(キーボードによってフレームが異なるため)。また、コンテンツオフセットよりもスクロールビューの枠を調整した方がやりやすいと思います。

于 2016-05-12T00:40:15.660 に答える