iOS 7.0之后tableview多了一个属性:UITableViewAutomaticDimension,此后利用xib创建的cell,用来实现tableviewcell自适应行高就变得简单高效许多。只是有一个前提:cell是用xib方式自定义创建,Autolayout做的约束。
先上效果图
利用xib创建自定义cell实现自适应行高,你需要确定cell中哪些控件是可变高度来影响行高的,本例中标题和底部线条是固定高度的,而描述的内容的标签控件是要根据服务器返回的数据进行动态改变从而影响cell行高的。固定高度的控件只需要设置相对上下控件(紧邻的上下控件)的约束即可,而可变高度的控件并不能设定高度。cell内部每一个控件都必须要设置相对上下的控件,哪怕少设置了一个控件的约束,都不能达到效果,设置约束的时候可以从上住下逐个设置约束,避免遗漏
本例中cell内部控件约束示意图
本例中描述内容的控件是标签,需要设置 numberOfLines = 0,同时也要设置宽度,确保标签内容过长可以自动换行。
设置完cell的约束,只需在对应的控制器里加两行代码即可实现tableview自适应行高。这两行代码既可以在viewDidLoad里写,也可以写在初始化tableview的方法中。
//设置预估行高
_sellingPointTB.estimatedRowHeight = 100.0f;
_sellingPointTB.rowHeight = UITableViewAutomaticDimension;
最后运行出来就是第一张图片展现出来的效果图。
其实写到最后回头想想本文中提到的一个前提:cell是用xib方式自定义创建,Autolayout做的约束。 可以看到用xib创建的cell内控件的约束,都是相对于上下紧邻控件设置的约束。如果使用纯代码创建cell,使用Masonry设置约束亦是如此,所以,这个方法也同样适用于纯代码创建的cell。