【问题标题】:Scroll TextView to the top将 TextView 滚动到顶部
【发布时间】:2019-07-06 15:01:22
【问题描述】:

我有一个文本视图 (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

}

不幸的是,当显示 Text View 时,文本并没有滚动到顶部,而是在中间的某个位置。

我在想,要么设置 contentOffset 是错误的做法,要么是我在错误的时间这样做(也许在设置 contentOffset 之后更改了文本?)。

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

非常感谢。谢谢。

【问题讨论】:

标签: ios swift uiscrollview uikit uitextview


【解决方案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)
}

【讨论】:

  • 我只想指出他们只需要多行代码,不想弄乱答案。既然你问了,我试着详细说明一下。
  • 你是个天才!在 viewDidLayoutSubviews() 中调用 .setContentOffset 有效!非常感谢。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      相关资源
      最近更新 更多