美文网首页
Masonry笔记

Masonry笔记

作者: 笑熬齊澄 | 来源:发表于2017-12-13 16:16 被阅读8次

    - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

    - (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;

    - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

    /*

    mas_makeConstraints 只负责新增约束 Autolayout不能同时存在两条针对于同一对象的约束 否则会报错

    mas_updateConstraints 针对上面的情况 会更新在block中出现的约束 不会导致出现两个相同约束的情况

    mas_remakeConstraints 则会清除之前的所有约束 仅保留最新的约束

    三种函数善加利用 就可以应对各种情况了

    */

    make.edges.equalTo(sv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));

    /* 等价于

    make.top.equalTo(sv).with.offset(10);

    make.left.equalTo(sv).with.offset(10);

    make.bottom.equalTo(sv).with.offset(-10);

    make.right.equalTo(sv).with.offset(-10);

    */

    /* 也等价于

    make.top.left.bottom.and.right.equalTo(sv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));

    */

    //and与with什么事情也没有做

    - (MASConstraint *)with {    return self;}

    - (MASConstraint *)and {    return self;}

    eg:让两个高度为150的view垂直居中且等宽且等间隔排列 间隔为10(自动计算其宽度)

    int padding1 = 10;

    [sv2 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.centerY.mas_equalTo(sv.mas_centerY);

    make.left.equalTo(sv.mas_left).with.offset(padding1);

    make.right.equalTo(sv3.mas_left).with.offset(-padding1);

    make.height.mas_equalTo(@150);

    make.width.equalTo(sv3);//****

    }];

    [sv3 mas_makeConstraints:^(MASConstraintMaker *make) {

    make.centerY.mas_equalTo(sv.mas_centerY);

    make.left.equalTo(sv2.mas_right).with.offset(padding1);

    make.right.equalTo(sv.mas_right).with.offset(-padding1);

    make.height.mas_equalTo(@150);

    make.width.equalTo(sv2);//****

    }];

    自动算宽度的秘籍在于

    /*

    int padding1 = 10;//先写好间距

    make.width.equalTo(sv3);//两个View中都要写对方

    make.width.equalTo(sv2);//两个View中都要写对方

    */

    相关文章

      网友评论

          本文标题:Masonry笔记

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