表视图调整父视图大小 iOS



这是一个困扰我很长一段时间的问题。

假设一个视图包含包含 X 项的表视图。目标是使该视图调整大小,使其与表视图的内容一样高。

一种方法

计算表格的内容视图总计(例如,如果有 5 行并且每行高 50 个单位,则它只是一个乘法问题(。然后将表视图约束在 0 0 0 0 到 视图中,并将视图高度设置为 250。

这适用于固定高度的单元格大小。然而!

a( 在自动调整大小且 tableHeightForRow 设置为UITableViewAutomaticDimension的情况下,尽管具有复杂的约束,但如何处理动态高度单元格的问题?

b( 一个想法可能是使用 tableView.contentSize。但是,我们何时可以安全地检索该值以相应地设置父视图框架?这可能吗?

谢谢大家

如果你有一个UITableView子类,你可以在contentSize上设置一个属性观察器,如下所示:

override var contentSize: CGSize {
didSet {
// make delegate call or use some other mechanism to communicate size change to parent
}
}

在我看来,最直接的方法是使用自动布局。如果采用此方法,则可以使用contentSize自动使intrinsicContentSize无效,这是自动布局用于动态调整元素大小的方法(只要它们没有更高优先级的放置约束来限制或显式设置其大小(。

像这样:

override var contentSize: CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
return contentSize
}

然后,只需将表视图添加到具有有效放置约束和所需内容拥抱/抗压缩性的父视图层次结构中。

最新更新