我该如何滚动到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在我更改其文本值后始终滚动到底部?
看看this answer。
使用Swift 4,类似下面的内容似乎对我有用(在iOS 9-12中):
let textViewBottom = NSMakeRange(textView.text.count - 1, 1)
textView.scrollRangeToVisible(textViewBottom)
textView.isScrollEnabled = false
textView.isScrollEnabled = true