iOS界面布局之二——初识autolayout布局模型
一、引言
在上一篇博客中介绍了传统的布局方式:autoresizing。随着iphone型号的越来越多,屏幕的标准也更加多样化,通过autoresizing已经不能满足开发的需求,而进行两套布局或者动态代码控制又大大增加了开发者的工作量,autolayout的出现拯救个这一切,它让动态布局变的十分简单便捷。
autoresizing介绍:http://my.oschina.net/u/2340880/blog/423357。
二、autolayout的设计思想
正如storyboard的设计目的是为了让开发者将更多的精力投入到逻辑实现而不是界面布局一样。autolayout的设计思想是让开发者将布局上更多的精力放在控件关系上而不是坐标。我们只需要关心控件之间的摆放关系,而并不需要关心这是如何实现的。因此你使用autolayout进行布局时,就是在添加一个一个的约束。控件与控件之间的约束,控件与父视图之间的约束。
1、了解几种约束
点击xcode的storyboard文件,在xcode的导航栏上点击Edito,然后选择Pin,可以看到如图,其中是可以添加的约束类型。
Width:对视图宽度的约束
Height:对视图高度的约束
Horizontal Spacing:对视图间水平距离的约束
Vertical Spacing:对视图间垂直距离的约束
Leading Space to Superview:与父视图左边界的约束
Trailing Space to Superview:与父视图右边界的约束
Top Space to Superview:与父视图上边界的约束
Bottom Space to Superview:与父视图下边界的约束
Widehs Equally:视图等宽约束
Heights Equally:视图等高约束
2、网上的一个很简单的约束例子
了解了上面的几种约束,现在我们来实现一个效果,借用网上关于autolayout自动布局的一个小例子。我们在storyboard中拖入三个label,使它们如下效果:
然后我们将屏幕横过来,会发现这时的效果并不是我们想得到的结果:
在进行添加约束之前,我们先来理清这三个视图之间的关系,将上面两个视图编号为1.2,下面那个视图编号为3.
(1)1和2的宽和高相等
(2)1距离父视图左边20px
(3)2距离父视图右边20px
(4)3距离父视图左边20px,右边20px
(5)1和2水平间距20px
(6)1与3垂直间距20px
(7)1和2距离父视图上边距50px
(8)3距离父视图下边距20px
(9)3与1和2的高度一样
通过上面的约束,所有视图的位置都将被相对的固定,下面我们只需要按照顺序一一添加即可。
(1)选中1和2视图(按住cmd键可以多选),然后点击Editor->Pin之后选择Widehs Equally,重复上面的过程,选择Heights Equally。我们会看到如下的效果:
几点注意:
*线是橙色代表警告,我们没有添加足够的约束来确定位置或者约束有矛盾。
*如果线的中间显示的不是等号,而是数字,则是因为视图1和2的尺寸设置的不等,约束有矛盾。
(2)选中1.重复上面步骤,选择Leading Space to Superview。这时1的左边又会增加一条线:
点击这条线,在右边的设置去将约束值设置为20:
(3)重复上面步骤,选中视图2,添加Trailing Space to Superview约束。
(4)选中视图3,重复上面步骤。
(5)选中1和2,添加Horizontal Spacing,设置为20.
(6)选中1和3,添加Vertical Spacing,设置为20.
(7)为1和2分别添加Top Space to Superview约束。
(8)为3添加Bottom Space to Superview约束。
(9)选中1和3,添加Heights Equally约束。
上面的过程虽然繁琐,但是逻辑性十分清晰,这时你会发现所有的线都变成了蓝色,约束已经添加完整,我们再次运行后横屏,效果如下:
这就是我们想要的结果了。