1

我在一个单元格中有不同内容(视图、标签、图像视图)的 tableView 单元格。但是在某些单元格中,内容可能不完整。如何在不删除和添加始终约束的情况下使用调整单元格大小?谢谢。

问题说明

4

2 回答 2

0

Ray Wenderlich 有一个关于表格单元格动态大小的精彩教程,可以在这里找到: https ://www.raywenderlich.com/129059/self-sizing-table-view-cells

TL;DR 你需要确保你的单元格的内容被固定在单元格内容视图的所有四个侧面,以及设置为高优先级垂直拥抱,大于或等于标签上的高度限制。

于 2016-11-10T08:20:00.063 回答
0

此问题的一种可能解决方案:

  1. 为优先级为 1000 的隐藏状态添加约束
  2. 为具有较低优先级的调整大小的状态添加额外的约束(例如 750)
  3. 将仅用于隐藏状态的约束保存到IBOutlet集合中
  4. 将仅用于调整大小状态的约束保存到另一个IBOutlet集合中

代码:

@IBOutlet var hiddenConstraints: [NSLayoutConstraint] = []
@IBOutlet var visibleConstraints: [NSLayoutConstraint] = []

func hide(_ hide: Bool) {

    for hiddenConstraint in self.hiddenConstraints {
        hiddenConstraint.isActive = hide
    }

    for visibleConstraint in self.visibleConstraints {
        visibleConstraint.isActive = !hide
    }

    self.layoutIfNeeded()
}

有更快的解决方案:

  1. 将可以隐藏的内容移动到容器视图中
  2. 为容器视图设置高度约束
  3. 如果隐藏,则从代码高度约束常量更改为 0,如果可见,则更改为适当的高度

代码:

@IBOutlet var heightConstraint: NSLayoutConstraint!

func hide(_ hide: Bool) {

    self. heightConstraint.constant = hide ? 0 : 150  //Estimated height

    self.layoutIfNeeded()
}

这不是一个好方法,因为它会导致运行时约束崩溃。所以我更喜欢使用第一个。

此外,您还需要更新表格中的单元格以向上或向下移动其他单元格。

于 2016-11-10T09:00:05.547 回答