0

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

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

视频链接

4

1 回答 1

1

内容大小将使用滚动视图逻辑刷新。所以布局子视图肯定是不够的。我有一种情况,我根据内容调整表格视图的大小。我所做的是使用内在大小(这是故事板中的压缩优先级)。我将表视图子类化并覆盖这些:

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

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

然后可以通过约束来完成其余的工作。在我的情况下,我不会进一步调整它的大小,然后是超级视图,但你必须做你必须做的事情。这里还是要小心一点:如果这不受限制,您会破坏 table view dequeuing 功能,并且所有单元格可能会立即加载,这可能会消耗大量内存和 CPU。如果可能的话,我会避免这种情况。如果不是,那么下一个最好的方法是在滚动视图上使用垂直堆栈视图,它应该会产生与您预期相同的结果。

于 2018-08-28T11:54:18.540 回答