TableView调整父视图iOS

时间:2017-07-07 13:29:16

标签: ios swift uitableview autolayout

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

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

方法

总计计算tableView的内容(例如,如果有5行,每个高50个单位,那么它只是一个乘法事项)。然后将约束为0 0 0 0的tableView设置为视图,并将视图高度设置为250。

这适用于固定高度的单元尺寸。然而!

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

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

谢谢大家

1 个答案:

答案 0 :(得分:1)

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

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

在我看来,最直接的方法是使用Autolayout。如果采用这种方法,您可以使用contentSize自动使intrinsicContentSize无效,这是autolayout用于动态调整元素大小的内容(只要它们没有更高的优先级放置约束限制或明确设置他们的大小)。

这样的事情:

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

override var intrinsicContentSize: CGSize {
        return contentSize
    }

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