Masonry 簡單使用

2021-09-11 11:31:40 字數 4733 閱讀 7074

magicnumber -> autoresizingmask -> autolayout

以上是純手寫**所經歷的關於頁面布局的三個時期

在iphone1-iphone3gs時代 window的size固定為(320,480) 我們只需要簡單計算一下相對位置就好了

在iphone4-iphone4s時代 蘋果推出了retina屏 但是給了碼農們非常大的福利:window的size不變

在iphone5-iphone5s時代 window的size變了(320,568) 這時autoresizingmask派上了用場(為啥這時候不用autolayout? 因為還要支援ios5唄) 簡單的適配一下即可

在iphone6+時代 window的width也發生了變化(相對5和5s的螢幕比例沒有變化) 終於是時候拋棄autoresizingmask改用autolayout了(不用支援ios5了 相對於螢幕適配的多樣性來說autoresizingmask也已經過時了)

簡單介紹 masonry是乙個輕量級的布局框架,擁有自己的描述語法,採用更優雅的鏈式語法封裝自動布局,簡潔明瞭並具有高可讀性,而且同時支援 ios 和 max os x。masonry是乙個用**寫ios或os介面的庫,可以代替auto layout。

masonry 原始碼:

-定義以下兩個巨集,在使用masonry框架時就不需要加mas_字首了(定義巨集一定要在引入masonry.**件之前).

//1. 對於約束引數可以省去"mas_"

#define mas_shorthand

//2. 對於預設的約束引數自動裝箱

#define mas_shorthand_globals

- 引入標頭檔案 #import "masonry.h"

複製**

@property (nonatomic, strong, readonly) masconstraint *left;

@property (nonatomic, strong, readonly) masconstraint *top;

@property (nonatomic, strong, readonly) masconstraint *right;

@property (nonatomic, strong, readonly) masconstraint *bottom;

@property (nonatomic, strong, readonly) masconstraint *leading;

@property (nonatomic, strong, readonly) masconstraint *trailing;

@property (nonatomic, strong, readonly) masconstraint *width;

@property (nonatomic, strong, readonly) masconstraint *height;

@property (nonatomic, strong, readonly) masconstraint *centerx;

@property (nonatomic, strong, readonly) masconstraint *centery;

@property (nonatomic, strong, readonly) masconstraint *baseline;

複製**

- (nsarray *)mas_makeconstraints:(void(^)(masconstraintmaker *make))block;

- (nsarray *)mas_updateconstraints:(void(^)(masconstraintmaker *make))block;

- (nsarray *)mas_remakeconstraints:(void(^)(masconstraintmaker *make))block;

/*mas_makeconstraints 只負責新增約束 autolayout不能同時存在兩條針對於同一物件的約束 否則會報錯

mas_updateconstraints 針對上面的情況 會更新在block**現的約束 不會導致出現兩個相同約束的情況

mas_remakeconstraints 則會清除之前的所有約束 僅保留最新的約束

三種函式善加利用 就可以應對各種情況了

*/複製**

mas_makeconstraints 是給view新增約束,約束有幾種,分別是邊距,寬,高,左上右下距離,基準線。新增過約束後可以有修正,修正有offset(位移)修正和multipliedby(倍率)修正。

語法一般是 make.equalto or make.greaterthanorequalto or make.lessthanorequalto + 倍數和位移修正。

當約束衝突發生的時候,我們可以設定view的key來定位是哪個view

redview.mas_key = @"redview";

greenview.mas_key = @"greenview";

blueview.mas_key = @"blueview";

複製**

若是覺得這樣乙個個設定比較繁瑣,怎麼辦呢,masonry則提供了批量設定的巨集

masattachkeys

masattachkeys(redview,greenview,blueview); //一句**即可全部設定

複製**

注意點1: 使用 mas_makeconstraints方法的元素必須事先新增到父元素的中,例如[self.view addsubview:view];

注意點2: mas_equalto 和 equalto 區別:mas_equalto 比equalto多了型別轉換操作,一般來說,大多數時候兩個方法都是 通用的,但是對於數值元素使用mas_equalto。對於物件或是多個屬性的處理,使用equalto。特別是多個屬性時,必須使用equalto,例如 make.left.and.right.equalto(self.view);

注意點3: 注意到方法with和and,這連個方法其實沒有做任何操作,方法只是返回物件本身,這這個方法的左右完全是為了方法寫的時候的可讀性 。make.left.and.right.equalto(self.view);和make.left.right.equalto(self.view);是完全一樣的,但是明顯的加了and方法的語句可讀性 更好點。

// exp1: 中心點與self.view相同,寬度為400*400

-(void)exp1];

}//exp2: 上下左右邊距都為10

-(void)exp2];

}//exp3 讓兩個高度為150的view垂直居中且等寬且等間隔排列 間隔為10

-(void)exp3];

[view2 mas_makeconstraints:^(masconstraintmaker *make) ];

}複製**

//高階布局練習 ios自帶計算器布局

-(void)exp4];

[keyboardview mas_makeconstraints:^(masconstraintmaker *make) ];

//設定顯示位置的數字為0

uilabel *displaynum = [[uilabel alloc]init];

[displayview addsubview:displaynum];

displaynum.text = @"0";

displaynum.font = [uifont fontwithname:@"heiti sc" size:70];

displaynum.textcolor = [uicolor whitecolor];

displaynum.textalignment = nstextalignmentright;

[displaynum mas_makeconstraints:^(masconstraintmaker *make) ];

//定義鍵盤鍵名稱,?號代表合併的單元格

nsarray *keys = @[@"ac",@"+/-",@"%",@"÷"

,@"7",@"8",@"9",@"x"

,@"4",@"5",@"6",@"-"

,@"1",@"2",@"3",@"+"

,@"0",@"?",@".",@"="];

int indexofkeys = 0;

for (nsstring *key in keys)];

}if([key isequaltostring:@"?"])

}//正常的單元格

else

break;

case 2:

break;

case 3:

break;

case 4:

break;

case 5:

break;

default:

break;

}//按照行和列新增約束,這裡新增列約束

switch (colnum) 

break;

case 2:

break;

case 3:

break;

case 4:

break;

default:

break;}}

}];}

}複製**

Masonry的簡單使用

首先,在正式使用masonry之前,我們先來看看在xib中我們是如何使用autolayout 從圖中我們可以看出,只要設定相應得侷限,控制好父檢視與子檢視之間的關係就應該很ok的拖出你需要的需求。這裡就不詳細講解具體拖拽的方法.然後,我們按著上圖的屬性來看看如何簡單得使用masonry 這裡是mas...

Masonry的簡單使用

首先,在正式使用masonry之前,我們先來看看在xib中我們是如何使用autolayout 從圖中我們可以看出,只要設定相應得侷限,控制好父檢視與子檢視之間的關係就應該很ok的拖出你需要的需求。這裡就不詳細講解具體拖拽的方法.然後,我們按著上圖的屬性來看看如何簡單得使用masonry 這裡是mas...

初識Masonry,總結簡單使用方法

前情 因專案多人開發,決定棄用xib了,所以改用masonry來進行autolayout布局,這裡簡單總結下使用方法。常用方法 label為例 self.titlelabel mas makeconstraints masconstraintmaker make make.left.top.mas ...