美文网首页
使用masonry注意点

使用masonry注意点

作者: 张俊凯 | 来源:发表于2018-03-22 23:32 被阅读21次
  • 删除最左边的控件,自动重算当前布局方法


    image.png

    删除橙色后


    image.png
    实现思路:第一步,三个颜色正常写约束,实现图中效果
    第二步,在中间的黄色视图写约束的基础上,增加一个与与最左边的约束,优先级比与橙色约束的优先级低。当橙色消失后,与橙色的约束消失,自动使用与屏幕边距的约束
[self.yellowView mas_updateConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(100);
        make.top.offset(50);

        make.left.equalTo(self.orangeView.mas_right).offset(20);
        //当橙色View消失后,黄色View缺少左边约束,所以给其加一个优先级更低的左边约束。当第一个左边约束失效后,这个约束就起作用了
        make.left.equalTo(self.view.mas_left).offset(20).priority(300);//优先级默认为1000  这里设置小于1000
        
    }];

点击删除后通知系统重新布局

[self.yellowView removeFromSuperview];
    [UIView animateWithDuration:0.5 animations:^{
        //强制刷新布局
        [self.view layoutIfNeeded];
    }];

补充:

[self.view setNeedsLayout];//做更新标记
[self.view layoutIfNeeded]; //做必要布局

[self.view layoutSubviews];//所有子视图重新布局
make.left.equalTo(self.view.mas_left);
make.right.equalTo(self.view.mas_right);

可以缩写为

make.left.equalTo(self.view);
make.right.equalTo(self.view);

总结: equalTo括号里如果不标明对齐对象的哪一边,那么就默认等于make后面的边。

make.left.equalTo(self.view);
make.right.equalTo(self.view);

可以缩写为

make.left.right.equalTo(self.view);

总结: 系统会自动使用分配律,让括号里的对象对应的边与make后面的边对应。

make.top.left.bottom.right.equalTo(self.view);

可以缩写为

make.edges.equalTo(self.view);

总结: 上下左右就等于视图的边际,masonry缩写为edge

想让视图等于固定的一个值

make.width.mas_equalTo(100);
make.size.mas_equalTo(CGSizeMake(100, 30));
make.edges.mas_equalTo(UIEdgeInsetsMake(10, 10, 10, 10));

总结:mas_equalTo的括号里放的是具体的数值和结构体,不是对象,也就是用assign修饰的数据类型。

当scrollview内部的控件用masonry约束时,如果超出屏幕范围需要滚动,实现办法是在最底部的视图约束中加一句

make.bottom.equalTo(scrollView);

这样,系统会设置scrollview的contentsize显示最底部控件。
2018-7-20 补充:
如果scrollVIew只需要上下滚动,不要左右滚动,需要在scrollview上加一个contentView,让contentView的的宽度等于scrollview的宽度,高度设置为大于等于0,让高度可收缩改变,

[self.contentView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.scrollView);
        make.width.equalTo(self.scrollView);
        make.height.greaterThanOrEqualTo(@0.f);
    }];

把剩余的子控件全部添加在contentView上,最底部的控件底部等于contentView

[self.bottomGapLineView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.width.equalTo(self.scrollView);
            make.height.mas_equalTo(10);
            make.top.equalTo(self.bottomCardView.mas_bottom);
            make.bottom.equalTo(_contentView);//这里的优先级最高 contentsize 优先适应这个这里
        }];

这样,就可以防止scrollVIew在4英寸以及更小的机型上出现scrollView横向滚动的现象,也就是保证contentSize的width为0。

在初次布局使用了mas_makeConstraints后,后续更新frame不可以直接修改frame的任何一个值,需要使用mas_updateConstraints来进行更新,否则会出现奇怪的布局问题,不符合预期。

关于remakeContraints,是删除掉之前所有的约束,添加新的约束,updateConstraints是更新,对原来的不影响。

让视图铺满父视图,一句代码搞定make.edges.equalTo(self.contentView);让子视图的边等于父视图

相关文章

  • 使用masonry注意点

    删除最左边的控件,自动重算当前布局方法image.png删除橙色后image.png实现思路:第一步,三个颜色正常...

  • Masonry 使用注意

    1,如何打印 frame 2,UIScrollView 如何 使用 masnory 3,利用 masonry 使...

  • Masonry+SDLayout+Frame 干货

    Masonry基本使用与注意点 setNeedsLayout:告知页面需要更新,但是不会立刻开始更新。执行后会立刻...

  • Masonry

    在使用Masonry进行约束时,有一些是需要注意的。 在使用Masonry添加约束之前,需要在addSubview...

  • 关于Masonry的使用和注意点

    因为之前开发时都是在xib文件中添加约束,或者代码中计算frame并没有接触过Masonry,现在写篇博客来归纳总...

  • 【iOS开发】Masonry 的使用

    参考文章: 约束的高级用法注意点深入了解Masonry有不懂的地方可以先看这篇文章,很全面 一些要注意的点 使用 ...

  • scrollview 使用masonry注意

    https://blog.csdn.net/potato512/article/details/51226747

  • Masonry使用注意篇

    Github 简要 自动布局最重要的是约束:UI元素间关系的数学表达式。约束包括尺寸、由优先级和阈值管理的相对位置...

  • Masonry的使用注意

    1、在使用autoLayout之前,一定要先将视图添加到superView上,否则会报错。2、mas_makeCo...

  • swift 使用masonry注意

    首先在swift 中,约束的参数值和目标对象是在新的括号中去书写! swift不允许像下面这样一句书写,会报隐形解...

网友评论

      本文标题:使用masonry注意点

      本文链接:https://www.haomeiwen.com/subject/iqiaqftx.html