【发布时间】:2018-03-09 12:27:54
【问题描述】:
我应该如何滚动到 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 中,它只会滚动有时。
我无法弄清楚它为什么/何时滚动或不滚动。我添加了该打印语句以尝试弄清楚。该语句出现在 Swift 的控制台上,每次都有新更新的“底部”……但在模拟器中,它实际上只是偶尔滚动一次。如果我一次发送一条消息,屏幕会在 10 条消息后奇迹般滚动,在 22 条消息之后,20 条消息,20 条消息,21 条消息之后......
是否有关于 scrollRangeToVisible 的新要求或怪癖?
更重要的是,我做错了吗?
是否有其他(更有效)的方法可以让 UITextView 在我更改其文本值后始终滚动到底部?
【问题讨论】:
-
我有一个类似的问题,如果最后一个字符是换行符 (\n),textView 只会滚动到底部。所以我通过在每次更新结束时添加一个换行符来解决这个问题(并在每次更新之前删除 textView 中的最后一个字符)。
标签: swift scroll uitextview vertical-scrolling