自调整大小的 UITableViewCell 中的水平 UILabels

Posted

技术标签:

【中文标题】自调整大小的 UITableViewCell 中的水平 UILabels【英文标题】:Horizontal UILabels inside a self sizing UITableViewCell 【发布时间】:2016-03-23 17:28:59 【问题描述】:

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

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

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

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

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

目前约束设置正常:top、bottom、left、right,标签设置为 0 行等,当两个标签具有相同的文本或相同的行数时效果很好。

有什么办法可以在约束条件下做到这一点?或者我是否需要在索引路径处恢复到行的旧高度? =(

【问题讨论】:

【参考方案1】:

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

这是我设置约束的方式:

哪个有这个结果:

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

要得到这个结果:

【讨论】:

【参考方案2】:

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

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

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

单元格仍未调整大小,我必须在单元格上调用“layoutIfNeeded”,然后在 tableView:cellForRowAtIndexPath 中返回单元格。

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

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

【讨论】:

以上是关于自调整大小的 UITableViewCell 中的水平 UILabels的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UITableViewCell 根据屏幕大小调整大小

调整 UILabel 的大小以适应自定义 UITableViewCell 中的文本,无论宽度如何

自我调整大小的 UITableViewCell 中的 UIlabel 和 UIView 高度计算

在自定义 UITableViewCell 中调整 UITextView 的大小

如何使用 Swift 从 UITableViewCell 内的 NIB 调整自定义 UIView 的大小?

动态 UITableViewCell 不根据内容调整大小