在iOS 8上(我还没有在iOS 7上测试过)我有一个UITextView
,它在故事板中设置了文本。当视图实际出现时,文本显示为滚动,我不希望它滚动。事实上,我不知道为什么会这样。任何人都可以解释如何更改此行为,以便它显示滚动到顶部,因为它应该?
这非常容易重现:
UITextView
以将其粘贴到边距它立即在视觉上很明显,但如果您记录正在发生的事情,您将看到如下内容:
2015-03-10 10:34:47.198 ScrollViewTest[61180:2610445] [Inside viewDidLoad] <UITextView: 0x7f9c79851200; frame = (0 0; 600 600); text = 'Lorem ipsum dolor sit er ...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f9c78c89df0>; layer = <CALayer: 0x7f9c78c8c220>; contentOffset: {0, 0}; contentSize: {600, 592}>
2015-03-10 10:34:47.288 ScrollViewTest[61180:2610445] [Inside viewDidAppear] <UITextView: 0x7f9c79851200; frame = (0 0; 375 667); text = 'Lorem ipsum dolor sit er ...'; clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7f9c78c89df0>; layer = <CALayer: 0x7f9c78c8c220>; contentOffset: {0, 457.5}; contentSize: {375, 1176}>
据推测,这是因为frame
和/或contentSize
从故事板的初始加载更改为需要显示的实际尺寸。
这似乎与UITextView contentOffset is set类似,但该问题的公认答案不起作用。设置self.automaticallyAdjustsScrollViewInsets = NO
。
答案 0 :(得分:7)
我的猜测是,当应用自动布局时,内容偏移会被破坏。这发生在-layoutSubviews
执行之前。
因此,为了解决这个问题,我可以推荐两种解决方案。
UITextView
并在contentOffset
中设置-layoutSubviews
。-viewDidLayoutSubviews
添加到您的视图控制器,并为其中的任何文本视图设置contentOffset
。这些都是一些hacky变通方法,但是比-viewDidAppear:
或dispatch_async()
更好的hacky变通办法。
注意:请务必确保仅在适当时调整contentOffset
或-layoutSubviews
中的-viewDidLayoutSubviews
。
答案 1 :(得分:0)
我遇到了同样的问题。我通过在viewDidAppear
[yourTextView setContentOffset: CGPointMake(0,0) animated:NO];
您可以随意使用CGPointMake
,但这对我很有帮助。
希望这会有所帮助。