昨天耽误了一阵子在 scrollView 的布局上,记录一下。

如果可以提前确定 scrollViewcontentSize,就简单多了,但这种情况很少。

一般还是按照 subViews 自适应的比较合适,这样就需要一个 containerView 来撑起 scrollViewcontentSize

简单的代码示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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);
}];