使用自动布局使UITableViewCell自适应大小

3
我在UITableViewCell中有3个标签,并将标签设置为自动换行。如果它们换行,文本将进入下一个单元格。如何让AutoLayout根据内容扩展单元格而无需在heightForRowAtIndex方法中编写代码?难道我不能使用约束自动调整单元格大小吗?当标签中的文本不换行时,单元格看起来很好。一旦它换行,问题就出现了,我希望单元格能够重新调整大小以适应内容,并且顶部和顶部标签之间有与底部标签和底部之间相同的间距。
2个回答

2
很遗憾,您不能这样做。表视图首先计算自己的总高度,并对每个单元格的大小有固定的想法,当它们加载时,它不会从外部确定它的高度,并且它不会让布局约束改变单元格的高度。
如果您考虑表格的工作方式,使用单元格复用,则无法在没有加载每个单元格并将其添加到滚动视图中以及对整个表格执行布局传递的情况下调整表格的大小。那可能会导致相当差的性能。
您可以尝试在计算 heightForRow 时为数据源中的每一行填充一个“空闲”单元格(即您刚实例化的未添加到表格中的单元格)并对其进行布局。

我自己使用一个自由单元格。但是最好使用几个单元格,或者自己管理表视图中的单元格数量。 - Abizern
当你说“free cell”时,你是指在代码中创建它吗?所以我猜我需要做 label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding 这样就是单元格的高度了?或者我需要为每个单元格都进行 constraintToSize 操作吗? - Bot
我的意思是,在代码中创建一个单元格,填充它,并调用[layoutIfNeeded]来确定大小。如果您的约束设置正确,则应计算显示内容所需的确切单元格大小。 - jrturton

0

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

 Something like:
     cell.frame.size.height

如果高度足够大,你知道标签已经换行成两行,那么增加即将加载的单元格的高度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接