Я обнаружил, что если текст, добавленный в UITextView, содержит возврат каретки, то текстовое представление будет прокручиваться неправильно.
Я добавил следующую логику, чтобы можно было правильно рассчитать границы перед прокруткой до диапазона.
BOOL autoscroll = NO;
//I added a 10 px buffer here to allow for better detection as the textview is auto populated
if (textView.contentOffset.y >= (textView.contentSize.height - textView.frame.size.height - 10))
{
autoscroll = YES;
}
[textView setText:messageString];
[textView layoutSubviews];
if(autoscroll) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[textView scrollRangeToVisible:NSMakeRange(textView.text.length - 1, 1)];
});
}