mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法与注意事项 字数400 阅读117 评论0 喜欢2 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 清除原来的约束 从新设置约束; }];