Я обнаружил, что contentSize
на самом деле не отражает фактический размер текста, поэтому при попытке прокрутки вниз он будет немного отключен. Лучший способ определить фактический размер контента - использовать метод NSLayoutManager
usedRectForTextContainer:
:
UITextView *textView;
CGSize textSize = [textView.layoutManager usedRectForTextContainer:textView.textContainer].size;
Чтобы определить, сколько текста на самом деле отображается в UITextView
, вы можете рассчитать его, вычтя вставки текстового контейнера из высоты рамки.
UITextView *textView;
UIEdgeInsets textInsets = textView.textContainerInset;
CGFloat textViewHeight = textView.frame.size.height - textInsets.top - textInsets.bottom;
Тогда становится легко прокручиваться:
// if you want scroll animation, use contentOffset
UITextView *textView;
textView.contentOffset = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);
// if you don't want scroll animation
CGRect scrollBounds = textView.bounds;
scrollBounds.origin = CGPointMake(textView.contentOffset.x, textSize - textViewHeight);
textView.bounds = scrollBounds;
Некоторые цифры для справки о том, что разные размеры представляют для пустого UITextView
.
textView.frame.size = (width=246, height=50)
textSize = (width=10, height=16.701999999999998)
textView.contentSize = (width=246, height=33)
textView.textContainerInset = (top=8, left=0, bottom=8, right=0)