我正在使用Xcode 5.1.1为ios7开发。由于有新文本进入UITextView,我希望它如果文本上升,为用户留出空间来查看新文本。我有一些有用的东西,但显示新文本的动画很尴尬。它几乎就像是从文本的最顶端开始,并且每次被调用时都会快速到达底部。
CGPoint p = [textview contentOffset];
[textview setContentOffset:p animated:NO];
[textview scrollRangeToVisible:NSMakeRange([textview.text length] - 1,0)];
每次输入新文本时都会调用此代码。我希望它能像默认的iPhone信使一样流畅,只是随便滑动。
答案 0 :(得分:10)
正确的答案是设置:
_consoleView.layoutManager.allowsNonContiguousLayout = NO;
在ViewDidLoad
中然后:
_consoleView.text = text;
[_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)];
答案 1 :(得分:3)
(通过问题编辑回答。转换为社区维基回答。请参阅Question with no answers, but issue solved in the comments (or extended in chat))
OP写道:解决方案:问题在于,当文本被插入到texview中时,它会滚动到顶部,然后调用scrollRangeToVisible,将其滚动到底部,这会产生糟糕的动画和令人不快的用户体验。我通过在文本输入之前禁用滚动来解决这个问题,并在输入文本后启用它,因此它只调用scrollRangeToVisible
[textview scrollRangeToVisible:textview.selectedRange];
textview.scrollEnabled= NO;
textview.text = [textview.text stringByAppendingString:createdString];
textview.scrollEnabled= YES;