iOS中AutoLayout自动布局,自适应高度
2015-01-27 11:18
357 查看
以往我们做cell的自适应的时候都是要写许多的代码进行计算高度,而且在适配的时候容易出现问题,费时耗工.那么下面我们就共同探讨一种基于xib的自动计算高度的方法
1.我们先创建tableView,tableView的创建可以使用可视化编程,也可以手写代码
2,自定义cell,要求必须使用xib
在cell上添加控件的时候,我们必须确定这个控件的哪个方向上的量是确定的,哪个方向上的量是不确定的
首先我们现在cell的左上角拖一个imageView
我们可以确定imageView只需要通过 它距左 上的距离以及它自身的宽高 这些数值我们可以根据需求直接写定
![](http://img.blog.csdn.net/20150127145228169)
接下来就是imageView右侧的Label,我们根据上图可以看出,这个Label的宽度是会发生变化的,那么我们先将不需要变化的量给定,然后先给需要变化的宽一个预估计值
Label的左侧是相对于imageView的距离
![](http://img.blog.csdn.net/20150127145617911)
那么我们如何将Label的宽度设为自适应
点击Label,然后点击xcode右侧,选择调整尺度的选项,将需要改变的量前面的"="变为">="
![](http://img.blog.csdn.net/20150127145923411)
然后就是下面的Label的自适应,究其原理基本上和上面的这个Label是一样的
这个Label的上边是基于imageView,左侧右侧可以自己根据需求给定数值,宽度是一定的,据下边的距离是一定的,只有高度需要自适应,设置方法和上面一致,都是改为">=".由于这个Label显示的内容可能会出现多行,所以我们需要在将他的行数设置为0,也就是无限行
![](http://img.blog.csdn.net/20150127150308192)
2,设置完cell的控件,我们需要将自定义的cell加上标识符,当然,标识符的内容可以自行设置
![](http://img.blog.csdn.net/20150127150754171)
3.然后我们将自定义的cell里面的控件与cell进行关联
![](http://img.blog.csdn.net/20150127151043853)
4,tableView里面的设置就是正常的程序,不过在这里我们需要用注册的方式进行创建cell
其中红色箭头指向的字符串是我们刚才在自定义cell的时候写的标识符
黄色箭头指向的字符串是我们创建的自定义cell的类名,这里不要写错了,不然会出现nib找不到的错误提示
![](http://img.blog.csdn.net/20150127151319136)
在其他的地方的创建就和我们通常写的tableView的创建方法是一样的
但是这样写是有问题的,因为如果我们转动屏幕的时候,我们之前的布局就会全部变乱,那么我们应该怎么做呢
首先,我们先将我们需要自定义高度的Label抽离出来,再创建一个类,基于UILabel,在我们创建的UILabel类中,我们需要重写一个方法
![](http://img.blog.csdn.net/20150127151959760)
同时,我们在自定义cell里面需要自适应高度的Label创建时就应该使用我们定义的UILabel
![](http://img.blog.csdn.net/20150127152151125)
下面我们要做的就是在tableView里边返回行高,在返回行高的方法里面我们要根据Label里面的内容进行判断cell的高度
首先我们现在tableView里面写一个自定义cell的属性
![](http://img.blog.csdn.net/20150127152941235)
上面的代码就是我们返回高度的计算方法,
* 红色箭头标注的是我们需要传入自适应Label里面的内容,这样我们就可以根据内容来计算cell的高度
* 接下来的坐标,宽度设置,我们使用的是tableView的宽度,因为我们不需要对其宽度进行自适应,但是后面的高度我们使用的就 是我们自定义的cell的宽度,因为我们要根据Label的高度来计算整个cell的高度
* 最后返回高度的时候我们使用的是contentView
这样计算出的自适应高度,当我们旋转屏幕的时候,我们的cell的整个布局也不会发生变化
当然,如果我们的cell上的内容要是比这个丰富的话,在我们往cell上拖空间的时候,会比较麻烦,我们只需要确定哪个量是会变化的,哪个量是不会变化的,这样我们就可以完成自适应.这样写,比我们以前的方法要省时间,当然,现在刚开始可能会比较慢
1.我们先创建tableView,tableView的创建可以使用可视化编程,也可以手写代码
2,自定义cell,要求必须使用xib
在cell上添加控件的时候,我们必须确定这个控件的哪个方向上的量是确定的,哪个方向上的量是不确定的
首先我们现在cell的左上角拖一个imageView
我们可以确定imageView只需要通过 它距左 上的距离以及它自身的宽高 这些数值我们可以根据需求直接写定
接下来就是imageView右侧的Label,我们根据上图可以看出,这个Label的宽度是会发生变化的,那么我们先将不需要变化的量给定,然后先给需要变化的宽一个预估计值
Label的左侧是相对于imageView的距离
那么我们如何将Label的宽度设为自适应
点击Label,然后点击xcode右侧,选择调整尺度的选项,将需要改变的量前面的"="变为">="
然后就是下面的Label的自适应,究其原理基本上和上面的这个Label是一样的
这个Label的上边是基于imageView,左侧右侧可以自己根据需求给定数值,宽度是一定的,据下边的距离是一定的,只有高度需要自适应,设置方法和上面一致,都是改为">=".由于这个Label显示的内容可能会出现多行,所以我们需要在将他的行数设置为0,也就是无限行
2,设置完cell的控件,我们需要将自定义的cell加上标识符,当然,标识符的内容可以自行设置
3.然后我们将自定义的cell里面的控件与cell进行关联
4,tableView里面的设置就是正常的程序,不过在这里我们需要用注册的方式进行创建cell
其中红色箭头指向的字符串是我们刚才在自定义cell的时候写的标识符
黄色箭头指向的字符串是我们创建的自定义cell的类名,这里不要写错了,不然会出现nib找不到的错误提示
在其他的地方的创建就和我们通常写的tableView的创建方法是一样的
但是这样写是有问题的,因为如果我们转动屏幕的时候,我们之前的布局就会全部变乱,那么我们应该怎么做呢
首先,我们先将我们需要自定义高度的Label抽离出来,再创建一个类,基于UILabel,在我们创建的UILabel类中,我们需要重写一个方法
同时,我们在自定义cell里面需要自适应高度的Label创建时就应该使用我们定义的UILabel
下面我们要做的就是在tableView里边返回行高,在返回行高的方法里面我们要根据Label里面的内容进行判断cell的高度
首先我们现在tableView里面写一个自定义cell的属性
@interface TableViewController () @property (nonatomic, strong) MyCell *computCell; @end接下来我们需要注册计算高度的cell,就是我们设置的这个属性cell
//注册计算高度的cell self.computCell = [self.tableView dequeueReusableCellWithIdentifier:@"MyCell"];
上面的代码就是我们返回高度的计算方法,
* 红色箭头标注的是我们需要传入自适应Label里面的内容,这样我们就可以根据内容来计算cell的高度
* 接下来的坐标,宽度设置,我们使用的是tableView的宽度,因为我们不需要对其宽度进行自适应,但是后面的高度我们使用的就 是我们自定义的cell的宽度,因为我们要根据Label的高度来计算整个cell的高度
* 最后返回高度的时候我们使用的是contentView
这样计算出的自适应高度,当我们旋转屏幕的时候,我们的cell的整个布局也不会发生变化
当然,如果我们的cell上的内容要是比这个丰富的话,在我们往cell上拖空间的时候,会比较麻烦,我们只需要确定哪个量是会变化的,哪个量是不会变化的,这样我们就可以完成自适应.这样写,比我们以前的方法要省时间,当然,现在刚开始可能会比较慢
相关文章推荐
- iOS 6 编程 - 自动布局(Auto Layout)系列文章
- iOS 6 编程 - 自动布局(Auto Layout)系列文章
- iOS疯狂详解之自动布局(autolayout)下图片编辑器的实现
- IOS 6 自动布局 入门-1(IOS中autolayout和之前版本autoresize的差异)
- [转载] iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
- iOS 6编程-自动布局(Auto Layout)简介
- 学会爱上iOS自动布局(Auto Layout)(转)
- IOS 6 自动布局 入门-1(IOS中autolayout和之前版本autoresize的差异)
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- IOS 自动布局指南1 介绍(auto layout guide)
- IOS 6 自动布局 入门-1(IOS中autolayout和之前版本autoresize的差异)
- iOS开发技巧(系列十五:autolayout自动布局)
- iOS开发技巧(系列十五:autolayout自动布局)
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- ios Autolayout自动布局
- iOS自动布局(autolayout)下图片编辑器的实现
- IOS手动添加的View 在代码中使用(自动布局)autoLayout
- IOS 6 自动布局 入门-1(IOS中autolayout和之前版本autoresize的差异)
- [转载] iOS 8 Auto Layout界面自动布局系列1-自动布局的基本原理
- IOS 6 自动布局 入门-1 (Auto Layout)