Masonry簡介
Masonry是一個輕量級的布局框架,它擁有自己的描述語法(采用更優(yōu)雅的鏈式語法封裝)來自動布局,具有很好可讀性且同時支持iOS和Max OS X等。
總之,對于側(cè)重寫代碼的coder,請你慢慢忘記Frame,喜歡Masonry吧
使用前的準備
若是你對于自動布局很熟練的話,再接觸這個第三方Masonry
很容易上手的,對UI界面顯示的控件的約束本質(zhì)都是相同的,現(xiàn)在呢,我一般都是喜歡在控制器里導(dǎo)入 #import "Masonry.h"
之前再添加兩個宏,來提高App的開發(fā)效率。
//1. 對于約束參數(shù)可以省去"mas_"
#define MAS_SHORTHAND
//2. 對于默認的約束參數(shù)自動裝箱
#define MAS_SHORTHAND_GLOBALS
即:需要我們導(dǎo)入的框架與宏如下
//define this constant if you want to use Masonry without the 'mas_' prefix
#define MAS_SHORTHAND
//define this constant if you want to enable auto-boxing for default syntax
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"
宏必須添加在頭文件前面 -- 切記
添加約束前提:被約束的必須有父控件,其中約束項都必須是UIView或子類的實例。
約束的屬性
在此我就列舉幾個可能不太熟悉的吧
@property (nonatomic, strong, readonly) MASConstraint *leading; //首部
@property (nonatomic, strong, readonly) MASConstraint *trailing; //尾部
@property (nonatomic, strong, readonly) MASConstraint *baseline; //文本基線
約束的三種方法
/**
//這個方法只會添加新的約束
[blueView mas_makeConstraints:^(MASConstraintMaker *make) {
}];
// 這個方法會將以前的所有約束刪掉,添加新的約束
[blueView mas_remakeConstraints:^(MASConstraintMaker *make) {
}];
// 這個方法將會覆蓋以前的某些特定的約束
[blueView mas_updateConstraints:^(MASConstraintMaker *make) {
}];
*/
常見約束的各種類型
1.尺寸:width、height、size
2.邊界:left、leading、right、trailing、top、bottom
3.中心點:center、centerX、centerY
4.邊界:edges
5.偏移量:offset、insets、sizeOffset、centerOffset
6.priority()約束優(yōu)先級(0~1000),multipler乘因數(shù), dividedBy除因數(shù)
Masonry約束易忽略的技術(shù)點
使用Masonry不需要設(shè)置控件的translatesAutoresizingMaskIntoConstraints屬性為NO;
防止block中的循環(huán)引用,使用弱引用(這是錯誤觀點),masonry,的block沒有進行copy,不會形成循環(huán)引用的__weak typeof (self) weakSelf = self;(沒必要的寫法)
Masonry約束控件出現(xiàn)沖突的問題
當約束沖突發(fā)生的時候,我們可以設(shè)置view的key來定位是哪個view
redView.mas_key = @"redView";
greenView.mas_key = @"greenView";
blueView.mas_key = @"blueView";
若是覺得這樣一個個設(shè)置比較繁瑣,怎么辦呢,Masonry則提供了批量設(shè)置的宏MASAttachKeys
MASAttachKeys(redView,greenView,blueView); //一句代碼即可全部設(shè)置
equalTo 和 mas_equalTo的區(qū)別
#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__)))
得出結(jié)論:mas_equalTo只是對其參數(shù)進行了一個BOX(裝箱) 操作,目前支持的類型:數(shù)值類型(NSNumber)、 點(CGPoint)、大?。–GSize)、邊距(UIEdgeInsets),而equalTo:這個方法不會對參數(shù)進行包裝。
轉(zhuǎn)載地址:
http://www.itdecent.cn/p/e3162f3c61fa