之前寫過兩篇文章:iOS: 在代碼中使用Autolayout (1) – 按比例縮放和優(yōu)先級(jí)和iOS: 在代碼中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority講述在iOS中使用代碼來寫Autolayout,讀者可以看到港粱,用代碼寫Autolayout是比較枯燥且容易出錯(cuò)的隧枫。當(dāng)然也有很多代替方法嘲恍,比如蘋果官方的Visual Format Language驯绎,還有一些重量級(jí)的工程比如Masonry,這里介紹一個(gè)輕量的,支持iOS和OS X的工程PureLayout,之所以輕量是因?yàn)镻ureLayout沒有再加入一套自己的語法夫凸,而是以Category的形式輔助蘋果已有的NSLayoutConstraint
那套東西,體積小阱持,寫起來更底層同時(shí)也不乏可讀性。
比如上文中的簡(jiǎn)單的兩個(gè)黃色方塊的程序魔熏,用PureLayout寫更快捷衷咽。
首先,把PureLayout源代碼加入到工程中蒜绽,或者用CocoaPods安裝(podilfe
中加pod 'PureLayout'
)镶骗。
然后加一個(gè)創(chuàng)建View的輔助函數(shù):
- (UIView*)createView {
//有Autolayout不需要設(shè)置frame
UIView *view = [UIView new];
view.backgroundColor = [UIColor yellowColor];
//不允許AutoresizingMask轉(zhuǎn)換成Autolayout, PureLayout內(nèi)部也會(huì)幫你設(shè)置的。
view.translatesAutoresizingMaskIntoConstraints = NO;
return view;
}
?
在viewDidLoad
中創(chuàng)建兩個(gè)View躲雅,然后用PureLayout的方式加入Autolayout中的Constaint就可以了鼎姊,代碼非常好理解:
//創(chuàng)建兩個(gè)View
UIView *view1 = [self createView];
UIView *view2 = [self createView];
//addSubview
[self.view addSubview:view1];
[self.view addSubview:view2];
//設(shè)置view1高度為70
[view1 autoSetDimension:ALDimensionHeight toSize:70.0];
//view1和view2都都距離父view邊距為20
ALEdgeInsets defInsets = ALEdgeInsetsMake(20.0, 20.0, 20.0, 20.0);
[view1 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeBottom];
[view2 autoPinEdgesToSuperviewEdgesWithInsets:defInsets excludingEdge:ALEdgeTop];
//兩個(gè)view之間距離也是20
[view2 autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:view1 withOffset:defInsets.bottom];
?
運(yùn)行結(jié)果和上文一樣:
原文地址:http://www.mgenware.com/blog/?p=2335