让UITableViewCell使用autolayout调整自身大小

我在UITableViewCell有3个标签,并设置了标签,以便它们进行自动换行。 如果他们自动换行,文本会进入下一个单元格。 如何使AutoLayout基于内容扩展单元格而无需在heightForRowAtIndex方法中编写代码? 是不是有一个约束我可以用来根据contentView自动调整单元格?

在此处输入图像描述在此处输入图像描述

如果文本没有包装在标签中,则单元格看起来很好。 一旦它出现问题,我就希望让单元格resize以适应内容,底部标签和底部之间的间距与顶部和顶部标签之间的间距相同。

不幸的是,你不能这样做。 表格视图首先计算自己的总高度,并且在加载时对每个单元格的大小有一个固定的概念,它不会从外部确定它的高度,也不会让布局约束改变单元格的高度。

如果您考虑表格的工作方式,以及单元格重用,那么您无法在不添加每个单元格的情况下将表格从其单元格中resize并将其添加到滚动视图中,并对整个事物执行布局传递。 这可能会导致相当糟糕的表现。

您可以尝试填充“自由”单元格(即您刚刚实例化的单元格,而不是添加到表格中),并在计算heightForRow时为数据源中的每一行布置它。

在装入单个单元格时,在填充标签后,但在加载单元格实例之前,请检查标签高度。

  Something like: cell.frame.size.height 

如果高度足够大,您知道标签已包裹到两条线,则增加要加载的单元格的高度。