UIScrollView 在 viewDidLoad 中调用 setContentSize 后没有更新,但从按钮调用时会更新
Posted
技术标签:
【中文标题】UIScrollView 在 viewDidLoad 中调用 setContentSize 后没有更新,但从按钮调用时会更新【英文标题】:UIScrollView not updating after calling setContentSize in viewDidLoad, but does when called from a button 【发布时间】:2014-04-23 04:41:55 【问题描述】:我有一个ViewController
和一个UIScrollView
,其中包含一个包含可变大小内容的View
。
- ViewController
-ScrollView
-View
-label1
-label2
- ...
当调用控制器的viewDidLoad
时,我将UIScrollView
的内容大小设置为适当的高度,但视图不会滚动。如果我从按钮上的操作调用同一行,它会更新 contentSize
并正确滚动。我正在使用autolayout
。知道为什么以及如何解决它吗?
视图不会滚动:
- (void)viewDidLoad
[super viewDidLoad];
[_scrollView setContentSize:CGSizeMake(100,500)];
视图将正确滚动:
- (IBAction)test:(id)sender
[_scrollView setContentSize:CGSizeMake(100,500)];
【问题讨论】:
【参考方案1】:ViewDidAppear 也保证你的视图已经被加载和初始化但是 viewdidAppear 在 viewDidLayoutSubviews 之后触发。如果你在 ViewDidLoad Realted 中对 UI 进行大量编码,你的 ViewController 会延迟显示
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:NO];
[_scrollView setContentSize:CGSizeMake(100,500)];
【讨论】:
一点修正,[super viewDidAppear:animated];
和 viewDidLoad
也保证视图被加载和初始化。但是 viewdidAppear 在viewDidLayoutSubviews
之后触发
哇,感谢修复它,我不敢相信我没有想到这一点。将 viewDidLoad 保持在最低限度似乎也是一种好习惯。我会尽快接受这个答案(5 分钟)【参考方案2】:
不要在viewDidLoad
中设置内容大小。在viewDidAppear
做吧
【讨论】:
【参考方案3】: 视图控制器 -滚动视图 -看法 -标签1 -label2第一个 ScrollView 添加新的约束,下一个 label1 和 label2 添加约束,然后最终的 View 视图可以添加约束。
【讨论】:
以上是关于UIScrollView 在 viewDidLoad 中调用 setContentSize 后没有更新,但从按钮调用时会更新的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 内 UIScrollView 内 UIScrollView
UIScrollView 内的 UIScrollView 时滚动