1.框架下載地址
https://github.com/Masonry/Masonry
2.常用屬性含義(View+MASShorthandAdditions.h)
View+MASShorthandAdditions中屬性與NSLayoutAttrubute的對(duì)照表如下
MasonryNSAutoLayout說(shuō)明
left NSLayoutAttributeLeft左側(cè)
top NSLayoutAttributeTop上側(cè)
right NSLayoutAttributeRight右側(cè)
bottom NSLayoutAttributeBottom下側(cè)
leading NSLayoutAttributeLeading首部
trailing NSLayoutAttributeTrailing尾部
width NSLayoutAttributeWidth寬
height NSLayoutAttributeHeight高
centerX NSLayoutAttributeCenterX橫向中點(diǎn)
centerY NSLayoutAttributeCenterY縱向中點(diǎn)
baseline NSLayoutAttributeBaseline文本基線
make.size.mas_equalTo(size結(jié)構(gòu)體類(lèi)型)直接設(shè)置控件尺寸
make.edges.mas_equalTo(UIEdgeInsets類(lèi)型)直接設(shè)置邊緣間距
and with可以起連接作用
eg:make.size.and.top.equalTo(green)
3.添加約束的方法
mas_makeConstraints只負(fù)責(zé)新增約束Autolayout不能同時(shí)存在兩條針對(duì)于同一對(duì)象的約束否則會(huì)報(bào)錯(cuò)
mas_updateConstraints針對(duì)上面的情況會(huì)更新在block中出現(xiàn)的約束不會(huì)導(dǎo)致出現(xiàn)兩個(gè)相同約束的情況
mas_remakeConstraints則會(huì)清除之前的所有約束僅保留最新的約束
三種函數(shù)善加利用就可以應(yīng)對(duì)各種情況了
eg: [view mas_makeConstraints:^(MASConstraintMaker *make) {
}];
4.使用mas_makeConstrains方法的元素必須事先添加到父視圖中
mas_equalTo和equalTo區(qū)別:前者比后者多了類(lèi)型轉(zhuǎn)換操作,支持CGSize CGPoint NSNumber UIEdgeinsets。mas_equalTo是equalTo的封裝,equalTo適用于基本數(shù)據(jù)類(lèi)型,而mas_equaalTo適用于類(lèi)似UIEdgeInsetsMake等復(fù)雜類(lèi)型,基本上它可以替換equalTo。
上左為正下右為負(fù)是因?yàn)樽鴺?biāo)而來(lái)的視圖坐標(biāo)左上為原點(diǎn)X向右為正Y向下為正
舉例比較:
Make.left.equalTo(@64)這么寫(xiě)才可以字面量
make.left.mas_equalTo(64);而mas_equalTo可以不用字面量
5.使用詳解
offset,and,with,multipliedBy以下兩個(gè)都能使用
5.1 mas_equalTo參照self.view設(shè)置上下左右間距
make.top.mas_equalTo(10); //top替換成bottom,left,right即可設(shè)置各方位
make.edges.mas_equalTo(UIEdgeInsets類(lèi)型)一行設(shè)置四個(gè)邊緣間距
make.size.mas_equalTo(CGSizeMake(300, 300));一行設(shè)置尺寸
make.size.mas_equalTo(self.view).offset(-20);參照self.view偏移一點(diǎn)
5.2 equalTo參照任意view設(shè)置上下左右間距或者對(duì)齊
make.top.equalTo(anyView).offset(20); //參照anyView設(shè)置間距
make.top.equalTo(anyView); //對(duì)齊,默認(rèn)與make后屬性一致,此行可換成anyView.centerY等同方向的屬性,后面還可以跟偏移屬性
make.left.equalTo(@2);默認(rèn)參照superView;
equalTo方法參照的可以是自己,設(shè)置自身寬高的恒定比例:
make.height.equalTo(weakBlue.mas_width).multipliedBy(4/3.0);
5.3設(shè)置寬高約束
make.width.mas_equalTo(self.view);
make.width.equalTo(self.view);
make.size.equalTo(green);兩個(gè)view就相同大小
等同于
make.width.equalTo(green.mas_width);
make.height.equalTo(green.mas_height);
make.right.equalTo(weakSelf.view).offset(-20);
等同于
make.right.mas_equalTo(-20);
make.top.left.bottom.right.equalTo(weakSelf.view).width.insets(UIEdgeInsetsMake(20, 20, 100, 20));
等價(jià)
make.edges.equalTo(weakSelf.view).width.insets(UIEdgeInsetsMake(20, 20, 100, 20));
6.總結(jié)
(1)所有的屬性(top,bottom,left,right,leading,trailing,centerX,centerY,width,height,baseline,center,size,edges,insets,offset,and,with,multipliedBy等)都可隨意寫(xiě)在make后面,mas_equalTo和equalTo基本可以互換(就目前了解的);
(2)各種約束按想法來(lái),make.后可以實(shí)現(xiàn)。靈活運(yùn)用八大基本屬性top,bottom,left,right,centerX,centerY,width,height,并結(jié)合offset,multipliedBy屬性,一般的布局基本沒(méi)問(wèn)題。
(3)UIEdgeInsets結(jié)構(gòu)體類(lèi)似C,UIEdgeInsetsMake類(lèi)似CGRestMake;參照的anyView訪問(wèn)自身屬性使用的是anyView.mas_width(or top,left...);