将 TextView 滚动到顶部

Scroll TextView to the top

我有一个显示长文本的文本视图 (UITextView) 在运行时设置,如下所示:

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()

    if something {
        textView.text = "(very long text here)"
    }

    textView.contentOffset = CGPoint.zero  // doesn't work

}

不幸的是,当显示文本视图时,文本没有滚动到顶部而是在中间某处。

我在想,要么设置 contentOffset 的方式不对,要么我在错误的时间设置(也许文本在 设置 contentOffset 后被更改? ).

我已经尝试了很多,我什至联系了Apple Code Level Support。他们帮不了我,真的(这让我很惊讶)——你能吗?

非常感谢。谢谢。

您可能需要编写更多 information/code,因为如果您在只有一个 VC 带有 UITextView 的干净项目中尝试这段代码,您会发现它确实有效。如果您确实在使用某些条件 (if something),这可能就是问题所在。 something 在你的真实代码中是什么?

我有一个非常相似的问题,尤其是在 iPhoneX 上使用 splitview 和测试时,当我需要 textView 滚动到顶部时,我通过将这段代码合并到我的 ViewController 中解决了这个问题:

textView.setContentOffset(.zero, animated: false)
textView.layoutIfNeeded()

如果您希望在加载 ViewController 时滚动到 textView 的顶部:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        // Can add an if statement HERE to limit when you wish to scroll to top
        textView.setContentOffset(.zero, animated: false)
}

您需要使用 viewDidLayoutSubviews() 以便将滚动视图设置到顶部。

override func viewDidLayoutSubviews() {
   textView.setContentOffset(.zero, animated: false)
}