ここでUITextFieldのスクロールと非表示に関する多くの投稿を見て、UITextViewでも同じコードが機能すると信じていましたが、そうではないようです。私が最初に遭遇した問題は、私が持っているサンプル アプリが、横向きのみをサポートする iPad アプリであるということでした。通知から返されたキーボード サイズは、キーボードの高さと幅が逆になっていました。
次に、スクロールビューでテキストビューをスクロールすることはできますが、すべてが表示されるわけではなく、実際に表示されるテキストビューの量は、テキストビューのどこをタップするかによって異なります。それは、私が望むものではないカーソルがある場所までスクロールしているようなものです。
これが私が使用しているコードです。これは例から取ったもので、実際の唯一の変更点は、UITextField の代わりに UITextView を使用することです。私がする唯一のことは、テキストビューをテキストフィールドに置き換えることだけであれば、うまく機能します。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.width, 0.0);
_myscrollview.contentInset = contentInsets;
_myscrollview.scrollIndicatorInsets = contentInsets;
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.width;
DebugLog(@"textview = %@", _textview);
if (!CGRectContainsPoint(aRect, _textview.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, _textview.frame.origin.y-kbSize.width);
[_myscrollview setContentOffset:scrollPoint animated:YES];
}
}