UITableView的高度等于contentSize的高度

时间:2018-08-28 10:53:06

标签: ios swift uitableview uitableviewautomaticdimension

我有一个滚动视图以及if标签和tableView的内部。我希望该tableView由外部的scrollView而不是tableView的scrollView滚动,所以我要做的是将tableView的约束设置为等于contentSize height。但是我有一个问题,只有当推送动画完成时(我猜是viewDidLayoutSubviews被调用),它的大小才正确

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    tableHeightConstraint?.constant = tableViewController.tableView.contentSize.height
}

Video Link

1 个答案:

答案 0 :(得分:1)

内容大小将通过滚动视图逻辑刷新。因此,布局子视图肯定不够。我有一种情况,我根据表的内容调整表视图的大小。我要做的是使用固有大小(这是情节提要中的压缩优先级)。我对表视图进行了子类化,并覆盖了它们:

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

override var intrinsicContentSize: CGSize {
    self.layoutIfNeeded()
    return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}

然后可以使用约束条件来完成其他操作。在我的情况下,我不会进一步调整它的大小,然后才是superview,但您必须执行自己的操作。此处仍需谨慎:如果不限制此操作,则您将破坏表视图出队功能,并且所有单元可能会立即加载,这可能会消耗大量的内存和CPU。如果可能,我会避免这种情况。如果不是这样的话,下一个最好的选择是在滚动视图上使用垂直堆栈视图,这应该会产生与您期望的结果相同的结果。