用代码自动布局

学习网站:传送门 讲的蛮详细,作者有点烧包.

1,首先生成一个装载所有需要自动布局的父及子视图的一个字典,

代码:NSDictionary *views =NSDictionaryOfVariableBindings(self.view,_view3,_view2,_view1);

这样就创建好了,现在字典里面就是这样的:{"self.view":self.view,@"_view3":_view3,…}

2,定制约束条件,约束条件就是自动布局里面最关键的了。

代码:[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-10-[_view1(==_view2)]-10-[_view2]-10-|"options:0metrics:0views:views]];

这段代码有点长,我们分开来看,主要的就是里面的定制字符串部分(两个宽度相同的view,其间距是10个点,距离左右边框的距离也是10个点)了,现在我们来一一介绍,

2.1,|表示屏幕边框;

2.2,-10-表示10个像素的距离;

2.3,[控件名称]表示为那个控件加上约束;

2.4,[控件名称(限定条件)]表示为控件加上一定的限定条件【里面可以是(>=、<=、==)某(对象空间、固定的数值)】,上面的意思就是说view1和view2相同。

2.5,V:|-…..其中的 V: 代表着垂直方向上的自动布局,那么V:|就是距离上边框多远咯。例子:V:|-30-[_view1(<=200)]-10-[_view3]-10-| (view1的高度不能大于200点,距离上边框30个点,与view3的间距是10个点,view3与底边框的距离是10个点)

加上下面这货过后呢,就不需要给你的视图初始化大小咯。程序会自己去给你赋值的。

nextView.translatesAutoresizingMaskIntoConstraints=NO;//从约束群中得到自动转换调整大小的模具

除了这种方法,还有另外一种方法接下来就学习它吧。

直接上代码:

//添加约束,使按钮在屏幕水平方向的中央

NSLayoutConstraint *centerXContraint=[NSLayoutConstraint

constraintWithItem:_button

attribute:NSLayoutAttributeCenterX

relatedBy:NSLayoutRelationEqual

toItem:superView

attribute:NSLayoutAttributeCenterX

multiplier:1.0f

constant:0.0];

//添加约束,使按钮在屏幕垂直方向的中央

NSLayoutConstraint *centerYContraint=[NSLayoutConstraint

constraintWithItem:_button

attribute:NSLayoutAttributeCenterY

relatedBy:NSLayoutRelationEqual

toItem:superView

attribute:NSLayoutAttributeCenterY

multiplier:1.0f

constant:0.0];

//给button的父节点添加约束

[superView addConstraints:@[centerXContraint,centerYContraint]];

初始化约束的函数名有点长,我们来一一解读它每个参数的含义

constraintWithItem:需要被约束的对象

attribute:约束的属性,所有如下:

NSLayoutAttributeLeft,

NSLayoutAttributeRight,    NSLayoutAttributeTop,

NSLayoutAttributeBottom,    NSLayoutAttributeLeading,

NSLayoutAttributeTrailing,    NSLayoutAttributeWidth,

NSLayoutAttributeHeight,    NSLayoutAttributeCenterX,

NSLayoutAttributeCenterY,    NSLayoutAttributeBaseline,

NSLayoutAttributeNotAnAttribute

relatedBy:与什么有关,即是==,>=,<=

NSLayoutRelationLessThanOrEqual = -1,

NSLayoutRelationEqual = 0,

NSLayoutRelationGreaterThanOrEqual = 1,

toItem:到那个对象

multiplier:多少倍的增值,倍增器

constant:常量

转载于:https://juejin.im/post/5a30f793f265da433227915b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值