约束 UIImageView 高度以尊重 UITableViewCell 中的动态 UILabel 高度

wil*_*tel 2 ios autolayout swift

我有一个 UITableView 填充了一种类型的自定义 UITableViewCell。每个单元格包含标题(UILabel)、副标题(UILabel)和缩略图(UIImageView),如下所示。

原型细胞视觉

三个子视图的宽度都是固定的,但只有字幕标签的高度是固定的。标题标签的高度是根据文本量动态变化的。我已将标题标签设置numberOfLines为 0 以反映这一点。

我的目标:单元格的高度应由标题标签的高度决定。换句话说,单元格高度应该是两个标签的高度加上三个垂直填充间隙的总和。图像高度应设置为单元格的结果高度。

我当前的实现:我设置了以下自动布局约束:

  • 缩略图与顶部、左侧和底部的超级视图挂钩
  • 缩略图宽度与超级视图宽度成 0.2 的倍数
  • 缩略图的右侧与标题和副标题挂钩(尾随空格 = 8)
  • 标题与顶部和右侧的超级视图挂钩(尾随空格 = 8)
  • 标题在其底部与副标题挂钩(尾随空格 = 8)
  • 标题高度大于等于24
  • 字幕与右侧和底部的超级视图挂钩(尾随空格 = 8)
  • 字幕高度等于20

此外:

  • 标题numberOfLines= 0
  • 缩略图contentMode= 纵横填充
  • 缩略图clipToBounds= 真

问题:图像高度不考虑标签的高度,所以单元格的高度设置为图像的全高,标题标签被垂直拉伸。鉴于我使用的限制,这是可以理解的,但这不是我想要发生的。

我的问题:如何约束 UIImageView 的高度以尊重单元格高度(由动态标签高度确定),而不是让单元格高度尊重 UIImageView 高度?

我的环境

  • Xcode 10
  • iOS 11 和 12
  • 斯威夫特 4.2

Ant*_*nov 7

尝试将thumbnailvertical设置为compression resistance低于titlevertical hugging priority。在代码中它看起来像这样:

    thumbnail.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
    titleLabel.setContentHuggingPriority(.required, for: .vertical)
Run Code Online (Sandbox Code Playgroud)