mas_makeConstraints &&

作者: 阶梯 | 来源:发表于2017-05-25 14:13 被阅读118次

1 mas_makeConstraints 只负责新增约束,Autolayout 不能同时存在两条针对于同一对象约束 否则会报错
注意:在添加约束之前一定要添加到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 针对上面的情况, 会更新block中出现的约束
不会导致出现两个相同的约束的情况

  • 注意: 同一个对象 使用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 &&

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