最近在做项目的时候,用到了Storyboard,往里面拖了一个scrollView,然后在scrollView又加了很多控件,但是一跑起来,就不能滑动了。。。。这是神马情况? 按正常情况,scrollView不能滑动,要不就是 contentSize
比 scrollView 的 frame
小,要不就是 scrollEnabled
属性没设置成 YES
.
可是这两个我都设置了,没有问题啊。 后面发现应该是约束的问题,于是就把 AutoLayout
给去掉了,然后运行发现可以滑动了,但是我由于使用Storyboard,里面加了很多约束,去掉就得重新修改,这太麻烦了。
打印了一下生命周期函数,发现执行顺序是这样的
2015-12-13 12:04:52.053 Test[33645:13750163] viewDidLoad
2015-12-13 12:04:52.053 Test[33645:13750163] viewWillAppear
2015-12-13 12:04:52.100 Test[33645:13750163] viewWillLayoutSubviews
2015-12-13 12:04:52.101 Test[33645:13750163] viewDidLayoutSubviews
2015-12-13 12:04:52.106 Test[33645:13750163] viewDidAppear
因为在Autolayout下,会在viewDidAppear之前根据subview的constraint重新计算scrollview的contentsize。 这就是为什么,在viewDidLoad里面手动设置了contentsize没用。因为在后面,会再重新计算一次,前面手动设置的值会被覆盖掉。 也就是说只要在
viewWillAppear
之后设置contentSize
是有效的。
这算是找到答案了,解决办法可以在 viewDidAppear:
方法中重新设置 contentSize
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.scrollView.contentSize = CGSizeMake(0, 1000);
}
也可以添加 viewDidLayoutSubviews
这个方法
-(void)viewDidLayoutSubviews {
self.scrollView.contentSize = CGSizeMake(0,1000);
}
如果这样还不行的话,就只能手写代码了~~~
本文作者:
Aeron_Xie
最后更新: 2023年03月25日 22:39:56
本文链接: http://aeronxie.github.io/post/ae34c04c.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!
最后更新: 2023年03月25日 22:39:56
本文链接: http://aeronxie.github.io/post/ae34c04c.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!