滚动到UITextView停止工作的底部

时间:2017-09-27 21:40:58

标签: swift scroll uitextview vertical-scrolling

如何滚动到UITextView的底部?我之前在stackoverflow上发布的一个帖子在我更新到Swift 4时停止了工作。

我的程序会定期将新信息粘贴到UITextView(consoleZe),然后滚动到它的底部,以便最新的更新始终可见,控制台风格。我的updateConsole方法基本上是这样的:

    if let tempString = consoleZe.text {
        currentText = tempString
    }

    consoleZe.text = currentText + "A message!\n"

    let bottom = NSMakeRange(consoleZe.text.characters.count - 1, 1)
    consoleZe.scrollRangeToVisible(bottom)
    print("Scrolled to \(bottom)")

在Swift 3中,这非常有用!现在在Swift 4中,它只滚动有时

我无法弄清楚为什么/何时滚动或不滚动。我添加了print语句来试图找出它。声明出现在Swift的控制台上,每次都有一个新更新的“底部”...但是在模拟器中它实际上只是偶尔滚动一次。如果我一次发送一条消息,屏幕会在10条消息之后,22条消息,20条消息,20条消息,21条消息之后奇迹般地滚动...

是否有关于scrollRangeToVisible的新要求或怪癖?

更重要的是,我做错了吗?

在更改文本值后,还有其他(更有效)的方法要求UITextView始终滚动到底部吗?

1 个答案:

答案 0 :(得分:0)

签出this answer

在Swift 4中,以下内容似乎适用于我(在iOS 9-12中):

let textViewBottom = NSMakeRange(textView.text.count - 1, 1)
textView.scrollRangeToVisible(textViewBottom)
textView.isScrollEnabled = false
textView.isScrollEnabled = true