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 清除原來的約束 從新設置約束; }];