昨天耽误了一阵子在 scrollView 的布局上,记录一下。
如果可以提前确定 scrollView
的 contentSize
,就简单多了,但这种情况很少。
一般还是按照 subViews
自适应的比较合适,这样就需要一个 containerView
来撑起 scrollView
的 contentSize
。
简单的代码示例:
UIScrollView *scrollView = [UIScrollVie new];
[self.view addSubview:scrollView];
UIView *containerView = [UIView new];
[scrollView addSubview:containerView];
UIView *v1 = [UIView new];
v1.backgroundColor = [UIColor redColor];
[containerView addSubview:v1];
UIView *v2 = [UIView new];
v2.backgroundColor = [UIColor blueColor];
[containerView addSubview:v2];
/*
如上,我想让v1、v2纵向排列,让scrollView可以上下滚动。
*/
// scrollView正常进行约束
[scrollView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.equalTo(self.view);
}];
// 容器视图
[containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.width.equalTo(scrollView); // 试了发现这里好像必须要约束一下width
}];
// v1、v2都放在容器里
[v1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(containerView);
make.height.equalTo(@400);
}];
[v2 mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(v1.mas_bottom);
make.left.right.equalTo(v1);
make.height.equalTo(@400);
}];
// 这里需要补刀,来撑起contentSize
[containerView mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(v2);
}];