iOS自适应行高方法及问题

最近一周被项目的动态高度虐的很惨,感觉浪费了很多时间,但是值得高兴的是对动态高度的使用掌握了好多方法,并且知道了方法之间的区别和优缺点.

1.最常用的:

UITableView+FDTemplateLayoutCell

优点就不说了,博客大把的有;

缺点就是这个第三方必须将自己的每个子控件的约束是正确的,一旦哪个约束错误,或者是冲突,就会导致莫名的崩溃;

2.在控制器中对返回的数据根据文字多少自动计算高度:

对动态高度的控件根据文字的多少确定高度,从而得到总的cell的高度,对于行高将计算的结果存到对应的数据源model中,返回单元格高度的时候,直接返回model的高度即可.

注意如果可以对数据进行修改的话,记得调用的时候要在返回高度的协议方法里调用计算高度的方法,因为刷新表视图会走这方法,不会走创建cell的方法.

缺点就是:当内容过多的时候会计算不准确,还是有点坑.

3.在model中计算高度,设置属性单元格的高度属性,控制器直接返回即可;<和第二种方法类似,只是计算的地方不同,还可以在cell里计算,不过这个好像不行,因为创建cell的时候会先走高度的方法>

4.最简单的:

两句代码解决高度问题:

//    self.tableView.estimatedRowHeight = 200; //设置预估高度,只要不是差的太离谱就行

//    self.tableView.rowHeight = UITableViewAutomaticDimension;// 自定计算

话说只能在iOS8系统上才能使用,但看API在6.0就可以了,不过在7的系统上貌似会崩溃.<这个还是到去年的时候再用吧...嘿嘿>

5.最后项目中还是用的这个方法:MyLinearLayout

MyLinearLayout的实现充分参考了Android中的LinearLayout布局,但是却比LinearLayout更为强大,他几乎可以实现AutoLayout的所有功能甚至其不具备的功能。MyLinearLayout是一个基于流式布局的容器视图,我们只需要把子视图添加到MyLinearLayout中,并设置一些简单的约束参数那么就可以完成各种布局的要求了,而且后续中只要子视图的位置和大小进行变化都会触发容器视图里面的子视图进行重新布局。

缺点就是:性能不高,会一直的计算高度.

 

对高度的问题就总结到这里了,希望大神纠错或者是提出建议,我们一起学习,嘿嘿!!!!!!

原文地址:https://www.cnblogs.com/pengsi/p/5713877.html