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中出現(xiàn)的約束
不會導致出現(xiàn)兩個相同的約束的情況
- 注意: 同一個對象 使用
mas_updateConstraints
一定要保證 block中要更新的元素是 其使用mas_makeConstraints
設置的約束
如下就是正確的 則不會出現(xiàn)約束沖突問題
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view1.mas_top).offset(-60);
//必須是 同一參照對象(都是以view1)同一參照屬性(都是以view1的mas_top)
}];
但是下面的就不對了 就會出現(xiàn)約束沖突 在iOS 7 及其以下會出現(xiàn)由于約束沖突出現(xiàn)的崩潰
[testView mas_updateConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(view2.mas_top).offset(-10);
make.centerX.equalTo(view4.mas_centerX);
}];
- 原因1 :不同一參照對象 (原來是view1 現(xiàn)在是view2)
- 原因2 : testView 在 mas_makeConstraints中沒有設置 center 所以無法更新
解決辦法:使用mas_remakeConstraints 清除原來的約束 重新設置約束;