Edited at

iOS7のUITextViewで文末にカーソルを移動する際のバグの回避方法

More than 5 years have passed since last update.

iOS7のUITextViewでカーソルを文末に移動するのに、以下のようにするとカーソルは文末に移動しますが、その後の動作がおかしくなる場合があります。


Objective-C

NSRange r = NSMakeRange(textView.text.length, 0);

textView.selectedRange = r;
[textView scrollRangeToVisible:r];

iOS7のUITextViewには文字の長さに関連したバグがあるようです。

これは以下のようにすることで回避できます。


Objective-C

UITextPosition *pos = textView.endOfDocument;

textView.selectedTextRange = [textView textRangeFromPosition:pos toPosition:pos];
CGRect caretRect = [textView caretRectForPosition:pos];
caretRect.size.height += textView.font.lineHeight;
[textView scrollRectToVisible:caretRect animated:NO];

ちなみにlineHeightを加算しているのは、最下行がキーボードの下に隠れるバグを回避するためです。また、animated:YESにすると、長文の場合に文末までスクロールしないことがあります。