什么时候更新 UITableView 高度 NSLayoutConstraint 最合适

Posted

技术标签:

【中文标题】什么时候更新 UITableView 高度 NSLayoutConstraint 最合适【英文标题】:When is it most appropriate to update UITableView height NSLayoutConstraint 【发布时间】:2015-10-01 11:45:20 【问题描述】:

TL;DR:UITableView contentSize 何时正确?

要更新我的表格高度约束,我使用以下函数:

func adjustHeightOfTableview()

    self.myTableView.layoutIfNeeded()
    let newHeight = self.myTableView.contentSize.height
    self.tableHeightConstraint.constant = newHeight
    self.view.setNeedsUpdateConstraints()

我尝试了这两种解决方案:

viewDidLayoutSubviews 中调用adjustHeightOfTableview

 override func viewDidLayoutSubviews()
    
        super.viewDidLayoutSubviews()
        self.adjustHeightOfTableview()
    

结果:表格根本没有出现在屏幕上。我想这是因为第一次调用viewDidLayoutSubviews 时内容大小为 0。由于表格高度设置为0,因此不会创建单元格并且不会再次调用viewDidLayoutSubviews

重新加载表后调用adjustHeightOfTableview(我有扩展名)

extension UITableView

    func reloadData(completion: ()->()) 
        UIView.animateWithDuration(0, animations:  self.reloadData() )
             _ in completion() 
    


//in my class:
self.relatedTableView.reloadData()

     self.adjustHeightOfTableview()

结果:桌子太高了。 contentSize 错误??

底线:如何以及在何处最好更新 UITableView 高度 NSLayoutConstraint?

【问题讨论】:

【参考方案1】:

找到了!答案就在这里:Height adjusted UITableView using Auto Layout

高度约束需要是低优先级,它起作用了。

我在重新加载表后和viewDidLayoutSubviews 中更新了约束 both,如问题中所述

【讨论】:

以上是关于什么时候更新 UITableView 高度 NSLayoutConstraint 最合适的主要内容,如果未能解决你的问题,请参考以下文章

更改后我的框架高度没有更新

如何在UITableViewCell内部更新UITableView的高度约束

展开或折叠时可展开的 UItableview 内容高度不同

UITableView 在开始/结束更新调用调整高度后自动滚动到顶部

我啥时候应该重新计算 UITableView 页脚的大小?

重新加载行以更新 UITableView 中的单元格高度时出现问题