平滑的UITextView自动滚动到框架的底部

时间:2014-06-27 13:31:25

标签: objective-c animation scroll uitextview

我正在使用Xcode 5.1.1为ios7开发。由于有新文本进入UITextView,我希望它如果文本上升,为用户留出空间来查看新文本。我有一些有用的东西,但显示新文本的动画很尴尬。它几乎就像是从文本的最顶端开始,并且每次被调用时都会快速到达底部。

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

每次输入新文本时都会调用此代码。我希望它能像默认的iPhone信使一样流畅,只是随便滑动。

2 个答案:

答案 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;