一、使用Maaonry注意事項(xiàng)
1.在使用Masonry添加約束之前,需要在addSubview之后才能使用,否則會(huì)導(dǎo)致崩潰。
2.在添加約束時(shí)初學(xué)者經(jīng)常會(huì)出現(xiàn)一些錯(cuò)誤,約束出現(xiàn)問(wèn)題的原因一般就是兩種:約束沖突和缺少約束。對(duì)于這兩種問(wèn)題,可以通過(guò)調(diào)試和log排查。
3.之前使用Interface Builder添加約束,如果約束有錯(cuò)誤直接就可以看出來(lái),并且會(huì)以紅色或者黃色警告體現(xiàn)出來(lái)。而Masonry則不會(huì)直觀的體現(xiàn)出來(lái),而是以運(yùn)行過(guò)程中崩潰或者打印異常log體現(xiàn),所以這也是手寫(xiě)代碼進(jìn)行AutoLayout的一個(gè)缺點(diǎn)。
二、基礎(chǔ)使用
Masonry基礎(chǔ)API
?mas_makeConstraints()? 添加約束
?mas_remakeConstraints()? 移除之前的約束,重新添加新的約束
?mas_updateConstraints()?? 更新約束
equalTo()
mas_equalTo()
width()? ? 用來(lái)表示寬度,例如代表view的寬度。代表坐標(biāo)系對(duì)象
mas_width()????用來(lái)獲取寬度的值。獲取坐標(biāo)系對(duì)象的值。
三、常用方法
1.設(shè)置內(nèi)邊距
通過(guò)insets簡(jiǎn)化設(shè)置內(nèi)邊距的方式
????[ self.view2 mas_makeConstraints:^(MASConstraintMaker *make {make.edges.equalTo(self.view1).insets(UIEdgeInsetsMake(5, 10, 15, 20));}];
2.更新約束
??? [self.view2 mas_makeConstraints:^(MASConstraintMaker *make){
??????? make.center.equalTo(self.view1).offset(0);
??????? make.size.mas_equalTo(CGSizeMake(80, 80)); }];
3.大于等于或小于等于某個(gè)值的約束
??????????? //設(shè)置寬度大于等于300
? ? ? ? ? ? make.width.greaterThanOrEqualTo(@300);
??????????? //設(shè)施寬度小于等于300
????????????make.width.lessThanOrEqualTo(@300);
4.設(shè)置約束優(yōu)先級(jí)
????Masonry為我們提供了三個(gè)默認(rèn)的方法,priorityLow()、priorityMedium()、priorityHigh(),? ?這三個(gè)方法內(nèi)部對(duì)應(yīng)著不同的默認(rèn)優(yōu)先級(jí)。
? 除了這三個(gè)方法,我們也可以自己設(shè)置優(yōu)先級(jí)的值,可以通過(guò)priority()方法來(lái)設(shè)置。
???? [self.view2 mas_makeConstraints:^(MASConstraintMaker *maker)? ? ? {
????????? maker.center.equalTo(self.view1);
????????? maker.width.equalTo(self.view1).priorityLow();
????????? maker.width.equalTo(@20).priorityHigh();
????????? ma height ker..equalTo(self.view1).priority(200);
????????? maker.height.equalTo(@40).priority(1000);
}];
5.約束比例
//設(shè)置當(dāng)前約束值乘以多少,例如view2的寬度是view1的兩倍
make.width.equalTo(self.view1).multipliedBy(2);