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 高度的主要内容,如果未能解决你的问题,请参考以下文章
UITableView tableHeaderView 高度计算
iOS UITableView tableHeaderView 高度变了