我有一个滚动视图以及if标签和tableView的内部。我希望该tableView由外部的scrollView而不是tableView的scrollView滚动,所以我要做的是将tableView的约束设置为等于contentSize height。但是我有一个问题,只有当推送动画完成时(我猜是viewDidLayoutSubviews
被调用),它的大小才正确
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
tableHeightConstraint?.constant = tableViewController.tableView.contentSize.height
}
答案 0 :(得分:1)
内容大小将通过滚动视图逻辑刷新。因此,布局子视图肯定不够。我有一种情况,我根据表的内容调整表视图的大小。我要做的是使用固有大小(这是情节提要中的压缩优先级)。我对表视图进行了子类化,并覆盖了它们:
override var contentSize:CGSize {
didSet {
self.invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
self.layoutIfNeeded()
return CGSize(width: UIViewNoIntrinsicMetric, height: contentSize.height)
}
然后可以使用约束条件来完成其他操作。在我的情况下,我不会进一步调整它的大小,然后才是superview,但您必须执行自己的操作。此处仍需谨慎:如果不限制此操作,则您将破坏表视图出队功能,并且所有单元可能会立即加载,这可能会消耗大量的内存和CPU。如果可能,我会避免这种情况。如果不是这样的话,下一个最好的选择是在滚动视图上使用垂直堆栈视图,这应该会产生与您期望的结果相同的结果。