【问题标题】:Smooth UITextView auto scroll to bottom of frame平滑 UITextView 自动滚动到框架底部
【发布时间】:2014-06-27 13:31:25
【问题描述】:

我使用 Xcode 5.1.1 为 ios7 开发。由于有新文本进入 UITextView,如果文本上升,我希望它为用户留下查看新文本的空间。我有一些可行的方法,但显示新文本的动画很尴尬。几乎就好像它从文本的最顶部开始,每次调用时都迅速下降到底部。

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

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

【问题讨论】:

  • 我认为回答您自己的问题的首选方法是将您的答案与 Your Answer 表单中的问题分开。然后接受你自己的答案。它还可以给你积分!

标签: objective-c animation scroll uitextview


【解决方案1】:

正确的答案是设置:

_consoleView.layoutManager.allowsNonContiguousLayout = NO;

在 ViewDidLoad 中

然后:

_consoleView.text = text;
[_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)];

【讨论】:

  • 谢谢 - 唯一能在堆栈溢出中顺利工作的答案。
  • Swift 3 self.yourTextField.scrollRangeToVisible(NSMakeRange(self.yourTextField.text.count - 1,0)) 应该可以正常工作
【解决方案2】:

(由问题编辑回答。转换为社区 wiki 答案。见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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多