程序员

ScrollView使用Masonry布局

2019-03-21  本文已影响0人  鄂北

大家先看下代码

// 先设置scrollview的布局,然后在scrollview里添加一个子视图(相当于内容视图),此视图就相当于scrollview的contentSize
UIScrollView * scrollview = [[UIScrollView alloc] init];
    [self.view addSubview:scrollview];
    [scrollview mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.bottom.top.equalTo(self.view);
    }];
    
    //内容视图相当于scrollview的contentSize
    UIView * content_view = [[UIView alloc] init];
    content_view.backgroundColor = [UIColor redColor];
    [scrollview addSubview:content_view];
    [content_view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(scrollview);
//如果是上下滑动就得把内容视图的宽固定,高不固定。如果是左右滑动就得把内容视图的高固定,宽不固定
//这里是上下滑动,所以将宽固定了(固定成了跟scrollview一样宽)
        make.width.equalTo(scrollview);
    }];

//scrollview上的内容就直接添加在内容视图(content_view)上就可以了,然后再设置内容视图的bottom的约束就可以了(相当于设置内容视图的高)

//例如我想在scrollview上添加一个view
UIView * view1 = [[UIView alloc] init];
   view1.backgroundColor = [UIColor whiteColor];
    view1.clipsToBounds = YES;
    view1.layer.cornerRadius = 10;
    [content_view addSubview: view1];
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        //这个view的高很明显就超出了scrollview的高
        make.height.equalTo(@2400);
        make.top.equalTo(content_view).offset(10);
        make.left.equalTo(content_view).offset(15);
        make.right.equalTo(content_view).offset(-15);
    }];

//代码到了这里虽然view1的高超出了scrollview的高,但是scrollview还不能上下滑动,因为scrollview的内容视图(content_view)宽固定了,但是高还没确定
//这里必须再把scrollview的内容视图(content_view)的高确定
//为什么一开始不确定内容视图(content_view)的高呢
//因为一开始我们并不知道view1有多高,所以一开始不好确定
//在这里我们只要设置内容视图的bottom的约束就可以了
//这样内容视图(content_view)就能自动计算高了,而不用自己去计算了
[content_view mas_makeConstraints:^(MASConstraintMaker *make) {
        make.bottom.equalTo(view1).offset(20);
    }];

还有个问题,我这里只在内容视图上放了一个view,但是在实际需求上会很复杂,不可能只有一个view,可能会有多个控件。如果是多个控件那该如何让scrollview上下滑动呢。原理是一样的,其他的不变只需更改scrollview的内容的高就可以了,也就是修改内容视图的bottom的约束,一定得让内容视图的bottom要在最后控件的bottom下面。

上一篇 下一篇

猜你喜欢

热点阅读