UIScrollview上使用AutoLayout,如果按照正常UIView 的思路去设置约束,是不会达到想要的效果的,为什么,不为什么就是屌。
其实UIScrollview的contentSize是需要子视图的大小去决定,而这时子视图又反过来去依赖父视图(UIScrollview)来决定它们的大小,这样就出大事了,等同于死锁.最终Game Over,没戏。
知道了原理,就可以得出解决方案:
1.设定UIScrollview的约束。
[scrollview mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
2.在UIScrollview上添加唯一一个直接的子视图container。
container = [UIView new];
[scrollview addSubview:container];
3.设置子视图container的相对于UIScrollview的约束,和设置container的宽度/高度.
[container mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(scrollview);
make.width.equalTo(self.view.mas_width);
make.height.equalTo(self.view.mas_height).offset(60);
}];
4.其他需要添加的子视图直接添加到container上,而不是UIScrollview上,并设置它们各自的约束(像普通视图那样去设置约束就行).
[subView1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(container.mas_leading).offset(10);
make.top.equalTo(container.mas_top).offset(10);
make.height.mas_equalTo(@20);
make.width.mas_equalTo(@280);
}];
[subView2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.leading.equalTo(container.mas_leading).offset(0);
make.top.equalTo(container.mas_top).offset(35);
make.height.mas_equalTo(@65);
make.width.equalTo(container.mas_width);
}];
搞掂,坐等完美的效果.