AutoLayout

AutoLayout

AutoLayout

传统的是采用设置frame的布局方式的思维开发界面,但是随着苹果设备屏幕尺寸的碎片化,这种方式逐渐被摒弃,在大多数情况下,比如页面支持屏幕旋转的话,这种设定frame的方式就会完全失效。很多人习惯在ViewDidload里面初始化控件,但是viewController要在viewWillLoyoutSubviews的时候才真正地确定view和子viewframe,所以在没有确定viewframe时去修改viewframe是不友好的,效果也是无法预料的。如果我们用设置Frame的方式布局的话就必须在viewWillLayoutSubviews中重新设定view的坐标大小,布局逻辑会变得更不清晰。而使用AutoLayout则不会有这些问题

AutoLayout的使用:

可以通过在storyBoard中通过拉线的方式,通过苹果的可视化界面就可以实现AutoLayout布局。另一种方式是通过纯代码的方式实现AutoLayout自动布局,即NSLayoutConstraint

纯代码:

APLLE官方API  NSLayoutConstraint

1Autoresizing Mask

在使用AutoLayout时需要将setTranslatesAutoresizingMaskIntoConstraints属性设置为NO。它默认为YES。当它为YES时系统会自动将Autoresizing Mask转换为Auto Layout的约束。这些约束可能会与我们自己添加的约束产生冲突。

所以如果你是使用 Xib/StoryBoard 的话,系统会自动帮你把这个属性设置为 NO

XIBStoryboardUse Auto Layout默认是选中的

[view setTranslatesAutoresizingMaskIntoConstraints:NO];


NSLayoutConstraint

Auto Layout 中约束对应的类是NSLayoutConstraint类,一个NSLayoutConstraint代表一条约束。

NSLayoutConstraint的方法

+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

view1的某个属性  =  view的某个属性的多少倍+某个常量

attribute有上、下、左、右、宽、高等 relatedBy小于等于、等于、大于等于,注意小于等于 大于等于 优先会使用 等于 关系,如果 等于 不能满足,才会使用 小于 大于。


      如果你使用XIB和storyboard,不想拉线去修改约束,可以使用代码修改约束。可以在父view的constraints数组中遍历查找。这是因为view的constraints数组中保存的是子view的约束集合。


修改约束的方法:

setNeedsLayout:告知页面需要更新,但不会立即更新,执行后会立即调用。

layoutlfNeeded:告知页面需要立刻更新。

layoutSubviews:系统重写布局。

updateConstraints:系统更新约束。

代码:

-(





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值