mas_makeConstraints && mas_remakeConstraints && mas_updateConstraints 用法與注意事項

1 mas_makeConstraints 只負(fù)責(zé)新增約束,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)的約束 不會導(dǎo)致出現(xiàn)兩個相同的約束的情況

注意: 同一個對象 使用mas_updateConstraints 一定要保證 block中要更新的元素是 其使用mas_makeConstraints 設(shè)置的約束

如下就是正確的 則不會出現(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中沒有設(shè)置 center 所以無法更新

}];

解決辦法:使用mas_remakeConstraints 清除原來的約束 重新設(shè)置約束;

}];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容