UITextview 不滚动到顶部

UITextview does not scroll to top

我正在使用 UITextView 在 ViewDidLoad() 中显示长文本:

var story1 = "Researchers on Friday introduced the stunningly realistic-looking interactive humanoid robot to the world, and she reacted by nodding her head, squinting, moving her hand and eyeballs and telling assembled local photographers, with her speech synched to her lip movements, to snap her face from a more flattering angle. Girl's got spirit. \n\nJia Jia made her public debut at the University of Science and Technology of China, where she came to life over the course of three years. While her rosy cheeks and pink lips make her look like she has blood running through her actuators, she still has a way to go before she'll be confused with a human. Her expressions are currently limited to 'microexpressions' and her speech has that distinct stiffness that screams 'I am a robot and I will one day chase you from your home'\n\......." // a very long text with many rows
self.storyTextView.text = story1

如果我为 storyTextView 设置 Scrolling Enabled,则文本视图不会从头开始显示文本。我可以在文本的中间(或底部)看到滚动指示器。

见截图1。

我试过了

self.storyTextView.scrollsToTop = true

但这并没有帮助。

如果我取消选中 Scrolling Enabled,或者如果文本不太长而无法在 UITextView 中显示整个文本,它会按预期从头开始显示。见截图 2。

有没有办法从文本的开头显示长文本(将滚动指示器移到顶部)?我检查了约束和布局,但似乎不相关。我确实搜索了很多但直到现在都没有运气。我可能错过了一些简单的设置,但任何人都可以帮助我。

使用contentOffset 属性:

textView.contentOffset = CGPointZero

Swift3 的更新:

textView.contentOffset = CGPoint.zero

试试这个: self.storyTextView.scrollRangeToVisible(NSRange(location:0, length:0))

在 iOS 11 和 swift 4 上工作的唯一解决方法是 在 viewDidLoad 处设置滚动关闭,在 viewDidAppear 处设置滚动。 它适用于 UIScrollView 和 UiTextView。 测试代码。

 override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.isScrollEnabled = false
 }

 override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    scrollView.isScrollEnabled = true
 }

在我的例子中,这个解决方案是可行的,Swift 4:

override func viewDidLayoutSubviews() {
    self.txt_about.setContentOffset(CGPoint.zero, animated: false)
}

在ViewController

中添加以下方法
 override public func viewWillLayoutSubviews() {
   super.viewWillLayoutSubviews()
   textView.contentOffset = CGPoint.zero
 }