将TextView滚动到顶部

时间:2019-02-12 21:34:11

标签: ios swift uiscrollview uikit uitextview

我有一个文本视图(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支持。他们真的帮不了我(这让我很惊讶)–可以吗?

我非常感谢。谢谢。

3 个答案:

答案 0 :(得分:1)

我有一个非常相似的问题,尤其是当在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)
}

答案 1 :(得分:0)

您可能需要编写更多的信息/代码,因为如果您在仅使用一个带有UITextView的VC的干净项目中尝试这段代码,就会看到它确实在工作。如果您确实使用某种条件(if something),则可能是问题所在。您的真实代码中的something是什么?

答案 2 :(得分:0)

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

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