masonry這個第三方庫件在github上很出名腊尚,貌似也很好用鹿蜀,但是我在看過masonry的介紹和使用方法之后,覺得有點隱隱的蛋疼检柬。
因為本人工作時間不多献联,加上一直都用的是Objective-C,看著masonry提供的方法基本上都是點語法何址,我的[]呢里逆?!用爪!怎么不在了原押?
于是在github上搜索到另外一個較出名的布局,便有了這段Purelayout的嘗試。
生成一個UIView:
UIView *view = [UIView newAutoLayoutView];
+ (instancetype)newAutoLayoutView
{
ALView *view = [self new];
view.translatesAutoresizingMaskIntoConstraints = NO;
return view;
}
newAutoLayoutView是UIView的一個擴展方法项钮,其實達到的目的就是生成一個UIView實例班眯,并把該實例的translatesAutoresizingMaskIntoConstraints屬性置為NO。這個屬性值在默認情況下是YES烁巫,如果設(shè)置為 NO署隘,那么在運行時,程序不會自動將AutoresizingMask轉(zhuǎn)化成 Constraint亚隙。
1.view相對于父容器間距的位置
[view autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:10];//相對于父容器頂部距離10
[view autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:10];//相對于父容器左部距離10
[view autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:10];//相對于父容器右部距離10
[view autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:10];//相對于父容器底部距離10
值得注意的是Purelayout對UILabel做了一些人性化的處理:
在有的國家地區(qū)文字是從右至左的磁餐,以下代碼就是將label的起始位置距離父容器10
[label autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:10];
2.相對于父容器的中心位置:
[view autoCenterInSuperview];//view在父容器中心位置
[view autoAlignAxisToSuperviewAxis:ALAxisHorizontal];//view在父容器水平中心位置
[view autoAlignAxisToSuperviewAxis:ALAxisVertical];//view在父容器垂直中心位置
3.設(shè)置大小
[view autoSetDimensionsToSize:CGSizeMake(300, 300)];//設(shè)置view的大小為300*300
[view autoSetDimension:ALDimensionHeight toSize:300];//設(shè)置view的高度為300
[view autoSetDimension:ALDimensionWidth toSize:300];//設(shè)置view的寬度為300
4.相對位置
NSLayoutRelation是一個枚舉類型:
typedef NS_ENUM(NSInteger, NSLayoutRelation) {
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,
};
見名知意,你懂的。
[view1 autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:view2 withOffset:20 relation:NSLayoutRelationEqual];//view1的頂部在view2的底部的20像素的位置
5.中心對齊
[view1 autoAlignAxis:ALAxisVertical toSameAxisOfView:view2];//view1相對于view2保持在同一個垂直中心上
view1相對于view2保持在同一個垂直中心上
6.相對大小
[view1 autoMatchDimension:ALDimensionWidth toDimension:ALDimensionWidth ofView:view2];
view1的寬度和view2的寬度相等
在使用purelayout的時候值得注意:
1.purelayout提供的方法有些是只支持iOS8及以上的诊霹,如果iOS7及以下的調(diào)用了是會奔潰的羞延,本人就是因為這個被搞得欲仙欲死。好在purelayout在方法中都有介紹脾还。以上介紹的幾種使用場景的方法伴箩,也都是支持iOS7及以下系統(tǒng)的。
2.在view父容器為nil的時候鄙漏,執(zhí)行purelayout的方法會崩潰嗤谚。
有興趣的可以直接去github下載官方的demo,寫的也是相當(dāng)ok的怔蚌。
持續(xù)更新~~~