美文网首页ios实用开发技巧
mas_makeConstraints && m

mas_makeConstraints && m

作者: 男人宫 | 来源:发表于2018-02-02 13:28 被阅读8次

    mansory小记

    1.mas_makeConstraints的使用

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

    PS:注意:在添加约束之前一定要添加到view( [testView addSubview:self.view])上 否则会报错
    [testView mas_makeConstraints:^(MASConstraintMaker *make) {
     
    make.leading.equalTo(view1.mas_trailing).offset(10);
     
    make.bottom.equalTo(view2.mas_bottom).offset(-2);
     
    make.height.mas_equalTo(70);
     
    make.width.mas_equalTo(50);
     
    }];
    

    2.mas_remakeConstraints的使用

    如下:会清除原来的以view1 和view2 为参照的约束 保留 以view3 和view4 为参照的约束

    [testView mas_remakeConstraints :^(MASConstraintMaker *make) {
     
    make.bottom.equalTo(view3.mas_top).offset(-10);
     
    make.centerX.equalTo(view4.mas_centerX);
     
    make.height.mas_equalTo(70);
     
    make.width.mas_equalTo(50);
     
    }];
    

    3.mas_updateConstraints 的使用

    注意: 同一个对象 使用mas_updateConstraints 一定要保证 block中要更新的元素是 其使用mas_makeConstraints 设置的约束

    如下就是正确的 则不会出现约束冲突问题

    [testView mas_updateConstraints:^(MASConstraintMaker *make) {
     
    make.bottom.equalTo(view1.mas_top).offset(-60);
     
    必须是 同一参照对象(都是以view1)同一参照属性(都是以view1的mas_top)
     
    }];
    
    但是下面的就不对了 就会出现约束冲突 在iOS 7 及其以下会出现由于约束冲突出现的崩溃
    [testView mas_updateConstraints:^(MASConstraintMaker *make) {
    
    make.bottom.equalTo(view2.mas_top).offset(-10);
    
    make.centerX.equalTo(view4.mas_centerX);
    
    原因1:不同一参照对象 (原来是view1 现在是view2)
    
    原因2 testView 在 mas_makeConstraints中没有设置 center 所以无法更新
    
    }];
    
    解决办法:使用mas_remakeConstraints 清除原来的约束 重新设置约束;

    相关文章

      网友评论

        本文标题:mas_makeConstraints && m

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