动态调整 UITableViewCells 的大小

Posted

技术标签:

【中文标题】动态调整 UITableViewCells 的大小【英文标题】:Dynamically sizing UITableViewCells 【发布时间】:2018-04-26 11:11:20 【问题描述】:

我以前曾使用过动态调整UITableViewCell 的大小。但目前我面临一个问题陈述,我无法使用 autolayout 实现动态调整大小

我的单元格包含三个组件,即一个UIImageView,两个UILabel

单元格的结构如下

UIImageView 在我的情况下必须具有固定的宽度和高度 60X60

UIImageView 将在UITableViewCell 内垂直居中

UIImageViewleading constraint 来自15,来自UITableViewCell

现在两个UILabels是垂直放置的

两个标签都可以具有动态高度,我希望它们使用autolayout 推动扩展单元格,但我只能实现保持顶部UILabel 的高度不变,而下面的UILabel 高度增加。

我希望UILabel 垂直扩展并增加UITableViewCell. 的大小

【问题讨论】:

您可能需要找到String 的高度并手动调整UILabelUITableViewCell 的大小。 尝试将两个标签约束的高度都设置为大于或等于。 Multiline UILabels 和自动布局不能很好地结合在一起。对于这类布局,我通常使用手动布局。 正如@SagarShirbhate 所说,一种选择是计算标签应具有的高度 - 我会为第一个 UILabel 执行此操作,我将为第二个使用动态高度。它应该可以正常工作。 【参考方案1】:

只需对两个标签都使用 StackView 并将两个标签 numberOfLine 设为 0,换行符应为 WordWrap. 为堆栈视图提供 前导、尾随、顶部和底部约束。标签之间的间距为 xcode 详细信息面板上的 stackview 提供间距。

【讨论】:

如果Stack View 可用,这是一个很好的解决方案。但不是Stack View.topStack View.bottom 使用“幻数38.5”(这就是它在Xcode 中不发出警告的原因)使用标准值,而是将底部边距设置为Greater Than or Equal。请注意,图像的高度和宽度应设置为满足约束条件。 我的应用程序支持 ios 8.0 或更高版本,因此我无法使用 UIStackView。【参考方案2】:

有关约束的设置,请参阅屏幕截图。 使用常量 greaterthanEqualTo 为标签添加一个高度约束一个固定值(参见屏幕截图 2)。并将 lines 设置为 0。在表视图中 heightForRowAt indexPath 将其设置为 UITableViewAutomaticDimension

【讨论】:

以上是关于动态调整 UITableViewCells 的大小的主要内容,如果未能解决你的问题,请参考以下文章

具有大小类的自调整 UITableViewCells 中的多行 UILabel - iOS 8 和 Swift

自我调整 UITableViewCells

屏幕外 UITableViewCells(用于大小计算)不尊重大小类?

在动态大小的 UITableViewCell 上应用 CAGradientLayer

自行调整特定 UITableView 单元的大小

根据内容自动调整 TableViewCell 的大小不起作用