何时最适合更新UITableView高度NSLayoutConstraint

时间:2015-10-01 11:45:20

标签: ios swift uitableview autolayout nslayoutconstraint

TL; DR:当UITableView contentSize正确时?

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

func adjustHeightOfTableview()
{
    self.myTableView.layoutIfNeeded()
    let newHeight = self.myTableView.contentSize.height
    self.tableHeightConstraint.constant = newHeight
    self.view.setNeedsUpdateConstraints()
}

我试过这两个解决方案:

  

adjustHeightOfTableview

中呼叫viewDidLayoutSubviews
 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()
}

结果:桌子要高了。错误的内容大小?

底线:更新UITableView高度NSLayoutConstraint的方式和位置最佳?

1 个答案:

答案 0 :(得分:3)

发现它!答案在这里:Height adjusted UITableView using Auto Layout

高度约束需要为低优先级并且有效。

我在重新加载表后更新了两者约束,并在viewDidLayoutSubviews中更新问题

height constraint low priority