注册

【iOS】自动布局之Purelayout

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,如果设置为 NO,那么在运行时,程序不会自动将AutoresizingMask转化成 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做了一些人性化的处理:
在有的国家地区文字是从右至左的,以下代码就是将label的起始位置距离父容器10

[label autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:10];

2.相对于父容器的中心位置:

[view autoCenterInSuperview];//view在父容器中心位置
[view autoAlignAxisToSuperviewAxis:ALAxisHorizontal];//view在父容器水平中心位置
[view autoAlignAxisToSuperviewAxis:ALAxisVertical];//view在父容器垂直中心位置

3.设置大小

[view autoSetDimensionsToSize:CGSizeMake(300, 300)];//设置view的大小为300*300
[view autoSetDimension:ALDimensionHeight toSize:300];//设置view的高度为300
[view autoSetDimension:ALDimensionWidth toSize:300];//设置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及以下的调用了是会奔溃的,本人就是因为这个被搞得欲仙欲死。好在purelayout在方法中都有介绍。以上介绍的几种使用场景的方法,也都是支持iOS7及以下系统的。
2.在view父容器为nil的时候,执行purelayout的方法会崩溃。

有兴趣的可以直接去github下载官方的demo,写的也是相当ok的。

持续更新~~~

链接:https://www.jianshu.com/p/15bb1bfec5e9

0 个评论

要回复文章请先登录注册