iOS 自动布局 Auto Layout 入门 06 详情页面 (c) 对左侧标签进行排版
2015-03-13 21:26
253 查看
前面两节我们解决了歌手名label和按钮的布局问题,接下来我们对界面中的一列标签进行自动布局。
![](http://img.blog.csdn.net/20150313213043816?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
为这些label添加位置约束:
Release Year标签到左边界的距离为0
Notes标签到顶部的垂直间距为64
每个label之间的垂直间距为14
![](http://img.blog.csdn.net/20150313213701128?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
选择resolve auto layout issues->update frames,看起来好多了吧:
![](http://img.blog.csdn.net/20150313213741174?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这里,我们只为Release Year这个label设置了x轴约束,其它4个label依靠“右对齐”约束,来确定自己在x轴的位置。
对于英文程序,这样就可以了,因为Release Year是最长的,但是如果这个label不是最长的,会怎么样的?下面,我们通过添加一些代码来试试:
为Release Year标签添加outlet
![](http://img.blog.csdn.net/20150313214442716?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到,当Release Year标签变得很短时,其它标签就越界了。。。
选中Record Label标签,添加Leading Space to Superview约束,在Relation中选择大约或等于
![](http://img.blog.csdn.net/20150313215810087?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
运行程序,现在效果是这样的了:
![](http://img.blog.csdn.net/20150313215741141?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Year标签的位置还不是很合适,我们期望它和其它标签一样靠右对齐。现在Year标签有2个水平约束,一个是leading space,一个是右对齐。从程序执行效果来看,显然是leading space约束赢了。我们可以修改这个约束为“大于或等于”。再添加另一个leading space水平约束,并将其优先级降低为200:
![](http://img.blog.csdn.net/20150313220428216?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
因为label和button控件都在知道自己的合适大小(用于显示标题),添加第二个leading space水平约束并设置其优先级低于200的目的是为了,让Year label不被拉伸。因为这个约束优先级低于250(Content Hugging),就会使label保持自己原有的大小。
选中界面中间部分的所有标签和按钮等控件,选择Editor菜单的Embed In\View选项,将它们加到子view之中:
![](http://img.blog.csdn.net/20150313221434766?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
不好的是,将控件加入子view会丢失之前对这些控件设置的约束。我们需要将它们全部添加回来。
加回来只有,我们需要为Record Label添加一个bottom space为20约束,用于确定子view的高度。
然后我们再为子view添加pin约束:
![](http://img.blog.csdn.net/20150313222702033?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFtaW5nd3U=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这样我们的子view和其中的label的约束就做好了:
对label进行排版
选中5个label选择Align\Right Edges:为这些label添加位置约束:
Release Year标签到左边界的距离为0
Notes标签到顶部的垂直间距为64
每个label之间的垂直间距为14
选择resolve auto layout issues->update frames,看起来好多了吧:
这里,我们只为Release Year这个label设置了x轴约束,其它4个label依靠“右对齐”约束,来确定自己在x轴的位置。
对于英文程序,这样就可以了,因为Release Year是最长的,但是如果这个label不是最长的,会怎么样的?下面,我们通过添加一些代码来试试:
为Release Year标签添加outlet
@property (weak, nonatomic) IBOutlet UILabel *releaseYearLabel;在nextButtonTapped函数的index++语句之前,添加以下代码:
static NSArray *texts; if (texts == nil) { texts = @[ @"Year:", @"Very Long Label Text:", @"Release Year:" ]; } self.releaseYearLabel.text = texts[index % 3];执行程序,效果如下:
可以看到,当Release Year标签变得很短时,其它标签就越界了。。。
选中Record Label标签,添加Leading Space to Superview约束,在Relation中选择大约或等于
运行程序,现在效果是这样的了:
Year标签的位置还不是很合适,我们期望它和其它标签一样靠右对齐。现在Year标签有2个水平约束,一个是leading space,一个是右对齐。从程序执行效果来看,显然是leading space约束赢了。我们可以修改这个约束为“大于或等于”。再添加另一个leading space水平约束,并将其优先级降低为200:
因为label和button控件都在知道自己的合适大小(用于显示标题),添加第二个leading space水平约束并设置其优先级低于200的目的是为了,让Year label不被拉伸。因为这个约束优先级低于250(Content Hugging),就会使label保持自己原有的大小。
使用subview
界面中间部分的label和其它控件还是比较多和复杂的,我们最好是添加一个子view,将这些空间放到这个子view中,这样可以将这些空间相关的约束也集中管理起来。选中界面中间部分的所有标签和按钮等控件,选择Editor菜单的Embed In\View选项,将它们加到子view之中:
不好的是,将控件加入子view会丢失之前对这些控件设置的约束。我们需要将它们全部添加回来。
加回来只有,我们需要为Record Label添加一个bottom space为20约束,用于确定子view的高度。
然后我们再为子view添加pin约束:
这样我们的子view和其中的label的约束就做好了:
相关文章推荐
- iOS 自动布局 Auto Layout 入门 06 详情页面 (d) 对右侧标签进行排版
- iOS 自动布局 Auto Layout 入门 06 详情页面 (b) 按钮的布局
- iOS 自动布局 Auto Layout 入门 06 详情页面 (a) 歌手名称Label
- iOS 自动布局 Auto Layout 入门 01 背景介绍
- iOS 自动布局 Auto Layout 入门 03 进一步学习使用约束
- iOS 自动布局 Auto Layout 入门 02 使用自动布局
- iOS 自动布局 Auto Layout 入门 05 相册 (上)
- iOS 自动布局 Auto Layout 入门 05 相册 (下)
- iOS 自动布局 Auto Layout 入门 04 约束的动态效果
- iOS 自动布局 Auto Layout 入门 05 相册 (中)
- iOS 6 自动布局入门
- 使用Grid来对WPF页面进行布局排版
- 使用Grid来对WPF页面进行布局排版
- IOS 6 自动布局 入门-1
- 使用Grid来对WPF页面进行布局排版
- Cocoa Touch 入门记——《精通 iOS 开发》学习心得(2) [iOS 7(Xcode 5)中的屏幕旋转与自动布局]
- IOS 6 自动布局 入门-1(IOS中autolayout和之前版本autoresize的差异)
- iOSLearningDiaryAutoLayout(自动布局)入门
- 使用Grid来对WPF页面进行布局排版
- iOSLearningDiary以编码的方式实现Auto Layout自动布局