標籤:
Masonry是一個封裝蘋果Autolayout的一個第三方架構。簡化了代碼添加約束的代碼量等。
:
https://github.com/SnapKit/Masonry
下載完後解壓縮,把Masonry這個檔案夾拖進項目裡就可以了。
下面是一個小小的執行個體:
先匯入標頭檔:
#import "Masonry/Masonry.h"
UIView *buleView = [[UIView alloc]init]; [buleView setBackgroundColor:[UIColor blueColor]]; [self.view addSubview:buleView]; [buleView mas_makeConstraints:^(MASConstraintMaker *make) { //大小 make.size.mas_equalTo(CGSizeMake(50, 50)); //位置:置中 make.center.mas_equalTo(self.view); }];
運行一下,在螢幕中央就有一個50*50的藍色小方塊了。
Masonry裡面幾個約束的方法:
[buleView mas_makeConstraints:^(MASConstraintMaker *make) { //添加新約束 }]; [buleView mas_remakeConstraints:^(MASConstraintMaker *make) { //會把以前的約束刪除掉,添加新的約束 }]; [buleView mas_updateConstraints:^(MASConstraintMaker *make) { //更新以前的約束 }];
引用Masonry文檔的一個例子:
效果是一個view距離父控制項上下左右都有10的邊距。官方列舉了兩種寫法,第二種直接一句話就能實現效果。
第一種:
UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);[view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler make.left.equalTo(superview.mas_left).with.offset(padding.left); make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom); make.right.equalTo(superview.mas_right).with.offset(-padding.right);}];
第二種:
[view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview).with.insets(padding);}];
到這裡我們會碰到很多mas_首碼和沒有這個首碼的東西,他們兩個的區別就是帶mas_首碼的是有對參數進行封裝的,例如:
mas_equalTo(100)
equalTo(@100)
沒有mas_首碼的就需要轉類型,反之則不用。
如果要使這兩個的效果等同,那麼Masonry提供了兩個宏給我們使用,但是需要注意的是,定義這個宏的時候,要在匯入Masonry標頭檔之前,例如:
//define this constant if you want to enable auto-boxing for default syntax#define MAS_SHORTHAND_GLOBALS//define this constant if you want to use Masonry without the ‘mas_‘ prefix#define MAS_SHORTHAND#import "Masonry/Masonry.h"
這樣就可以了。
IOS開發-Masonry