Smooth UITextView auto scroll to bottom of frame

2019-02-22 10:15发布

Im using Xcode 5.1.1 developing for ios7. As there is new text entering the UITextView, I would like it if the text went up, leaving room for the user to see the new text. I have something that works but the animation that shows the new text is awkward. Its almost as if it goes from the very top of the text and quickly goes to the bottom every time its called.

CGPoint p = [textview contentOffset]; [textview setContentOffset:p animated:NO]; [textview scrollRangeToVisible:NSMakeRange([textview.text length] - 1,0)];

This code is getting called every time new text is entered. I would like it to be as smooth as the default iPhone messenger where it just slides up casually.

2条回答
神经病院院长
2楼-- · 2019-02-22 10:21

The RIGHT answer is to set:

_consoleView.layoutManager.allowsNonContiguousLayout = NO;

In ViewDidLoad

Then:

_consoleView.text = text;
[_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)];
查看更多
时光不老,我们不散
3楼-- · 2019-02-22 10:44

(Answered by a question edit. Converted to a community wiki answer. See Question with no answers, but issue solved in the comments (or extended in chat) )

The OP wrote:

Solution: The problem was that when text was getting inserted into the texview it scrolled to the top then called the scrollRangeToVisible which scrolled it to the bottom, which gave a bad animation and an unpleasant user experience. I solved this by disabling scroll before the text enters, and enabled it after the text was entered so it only calls the scrollRangeToVisible

[textview scrollRangeToVisible:textview.selectedRange];
textview.scrollEnabled= NO;
textview.text = [textview.text stringByAppendingString:createdString];
textview.scrollEnabled= YES;
查看更多
登录 后发表回答