UITableView 高度等于 contentSize 高度

Posted

技术标签:

【中文标题】UITableView 高度等于 contentSize 高度【英文标题】:UITableView height equal to contentSize height 【发布时间】:2018-08-28 10:53:05 【问题描述】:

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

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

Video Link

【问题讨论】:

在单元格中使用自动布局并添加tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 320 重新加载您的表格视图,并在 0.7 秒的调度后设置约束,它将正常工作。 【参考方案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。如果可能的话,我会避免这种情况。如果没有,下一个最好的方法是在滚动视图上使用垂直堆栈视图,它应该会产生与您预期相同的结果。

【讨论】:

好的,必须检查几次以确认这确实有帮助! :o 非常感谢!

以上是关于UITableView 高度等于 contentSize 高度的主要内容,如果未能解决你的问题,请参考以下文章

设置一个 DIV 高度等于另一个 DIV

UITableView tableHeaderView 高度计算

改变 UITableView Customcell 的高度

iOS UITableView tableHeaderView 高度变了

使用 Auto Layout 将 UITableView 的高度设置为其内容的高度

iOS解决UITableView的contentOffset捕获不准确的问题