文本包含返回内容时滚动到UITextView的末尾

时间:2019-01-13 06:58:16

标签: swift scroll uitextview carriage-return linefeed

我正在使用Swift,并且有一个UITextView,我希望在添加新文本时始终保持滚动状态,并且文本的长度大于textView可以显示的长度。

只要我的textview不包含任何新行"\n"

,以下内容就可以完美地工作
let range = NSMakeRange(textView.text.count - 1, 1)
textView.scrollRangeToVisible(range)

但是,一旦添加返回值,该范围就不再对滚动有效。 我已经尽可能多地检查了相关的帖子,但是似乎都没有解决这个问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

好。我发现了问题所在。如果将UITextView设为不可选择,则当您以编程方式将文本添加到视图时,如果文本中有返回,则视图将无法正确滚动,而没有返回的文本将完美滚动。 这是一个简单的例子。用一个按钮和一个UITextView创建一个Viewcontroller。 连线并与两个布尔一起玩。 您将发现,如果isSelectable = false和isReturnText = true,则它将不会滚动,但是如果isReturnText = false,它将滚动查找。 如果我将isSelectable = true设置为true,则两者都将按预期完美滚动。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!
    var isSelectable:Bool = true
    var isReturnText:Bool = true


    let returnText = "These sentences are separated by returns.\n"
    let nonReturnText = "These sentences are separated by space. "

    override func viewDidLoad() {
        super.viewDidLoad()
        textView.isSelectable = isSelectable

    }

    @IBAction func addNoReturnText(_ sender: Any) {
        textView.text += isReturnText ? returnText : nonReturnText
        let range = NSMakeRange(textView.text.count - 1, 1)
        textView.scrollRangeToVisible(range)
    }

}