【问题标题】:Scrolling to the Bottom of a UITextView Stopped Working滚动到 UITextView 的底部停止工作
【发布时间】: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


【解决方案1】:

查看this answer

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

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

【讨论】:

  • 这在 iOS 13 中对我不起作用。它只会使 UITextView 空白。
猜你喜欢
  • 2013-05-17
  • 2017-08-23
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多