iOS中AutoLayout自动布局,自适应高度

来源:互联网 发布:java long长度 编辑:程序博客网 时间:2024/06/02 00:05

以往我们做cell的自适应的时候都是要写许多的代码进行计算高度,而且在适配的时候容易出现问题,费时耗工.那么下面我们就共同探讨一种基于xib的自动计算高度的方法

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上拖空间的时候,会比较麻烦,我们只需要确定哪个量是会变化的,哪个量是不会变化的,这样我们就可以完成自适应.这样写,比我们以前的方法要省时间,当然,现在刚开始可能会比较慢






 

0 0