自动调整大小的 UITableViewCell 内的水平 UILabels

Horizontal UILabels inside a self sizing UITableViewCell

问题:当并排的标签可以包含不同行数时,如何使用 UITableViewAutomaticDimension 在 UITableViewCell 中使用约束?

我有一个 table 单元格,其中并排包含标签:

如果一侧的某个标签的行数多于另一侧相应标签的行数,我将很难调整单元格的大小。其中一个标签总是被切断。如果两个标签的行数相同,则单元格会完美调整大小并且可以看到所有文本。

我已经尝试了一些约束调整,但没有一个能按预期完美运行。

我试过为高度添加隐藏标签...但它不适用于具有 4 个标签的单元格 我试过将标签放在视图中,但仍然需要计算视图的高度。

目前约束设置正常:顶部、底部、左侧、右侧、标签设置为 0 行等,当两个标签具有相同的文本或相同的行数时效果很好。

有什么方法可以在有限制的情况下做到这一点吗?或者我是否需要将索引路径处的行恢复为旧高度? =(

我找到了一个解决方案,我不必恢复使用 tableView:heightForRowAtIndexPath。

我在单元格中添加了一个标签,文本颜色设置为 clearColor,并将其命名为 'heightLabel'。我向 heightLabel 添加了约束,因此单元格会根据 heightLabel 的约束调整大小。

然后,无论左侧或右侧标签中文本最多的那个,我都将该标签的文本放在 heightLabel 中。

单元格仍未调整大小,我不得不在单元格上调用 'layoutIfNeeded',然后返回 tableView:cellForRowAtIndexPath 中的单元格。

heightLabel 约束现在用于调整单元格大小并且 UITableViewAutomaticDimensions 工作正常。

这可能不是最好的解决方案,但效果很好。如果有更合适的方法,我愿意接受建议。

有一种方法可以仅使用约束来实现您想做的事情。诀窍是将两个较低标签与底部之间的约束关系设置为 Greater Than or Equal 而不是 equal.

这是我设置约束的方式:

结果是这样的:

或者您可以将标签顶部和底部之间的约束设置为 Greater Than or Equal 并将底部约束保留在 equal:

得到这个结果: