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

标签 ios swift autolayout

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

prototype cell visual

三个 subview 的宽度都是固定的,只有字幕标签的高度是固定的。标题标签的高度根据文本的数量是动态的。我已将标题标签的 numberOfLines 设置为 0 以反射(reflect)这一点。

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

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

  • 缩略图在顶部、左侧和底部与 super View Hook
  • 缩略图宽度与父 View 宽度成正比,乘以 0.2 的倍数
  • 缩略图在其右侧与标题和副标题 Hook (尾随空格 = 8)
  • 标题与顶部和右侧的 super View Hook (尾部空格 = 8)
  • 标题在其底部与副标题 Hook (尾随空格 = 8)
  • 标题高度大于等于24
  • 副标题与右侧和底部的 super View Hook (尾随空格 = 8)
  • 字幕高度等于20

另外:

  • 标题 numberOfLines = 0
  • 缩略图 contentMode = 宽高比填充
  • 缩略图 clipToBounds = true

问题:图像高度不符合标签的高度,因此单元格的高度设置为图像的全高,标题标签垂直拉伸(stretch)。考虑到我使用的约束,这是可以理解的,但这不是我想要发生的事情。

我的问题:如何限制 UIImageView 的高度以符合单元格高度(由动态标签高度确定),而不是让单元格高度符合 UIImageView 高度?

我的环境:

  • Xcode 10
  • iOS 11 和 12
  • swift 4.2

最佳答案

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

    thumbnail.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
    titleLabel.setContentHuggingPriority(.required, for: .vertical)

关于ios - 约束 UIImageView 高度以尊重 UITableViewCell 中的动态 UILabel 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52602074/

相关文章:

ios - 如何在 iOS 的 Google Map SDK 中添加搜索功能?

ios - 模态呈现的 UISplitViewController 永远不会被释放

uiwebview - UIWebView 的自动布局问题

ios - 将属性类型从 Int16 更改为 Int64 时是否需要核心数据模型迁移

ios - 在 UITableViewCell 中将按钮右对齐

ios - 使用键盘和中心自动布局管理 View

ios - 了解没有应用程序调用的iOS线程转储

android - 解析复杂json数据时出现 flutter 问题

arrays - 使用字典中的键创建数组,并按字典值排序

ios - 如何在 iOS 8 中测试 http 请求?