我有一个设计,其中UITableView与其他内容一起位于UIScrollView中,并且内容与表格数据一起滚动。这意味着该表已被禁用滚动,并且已拉伸到完整大小。
我正在使用自动布局,表格具有高度限制,设置为一些默认值。
然后我覆盖了viewWillLayoutSubviews方法:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if (self.itemTableView.contentSize.height > 0) {
self.itemTableViewHeightConstraint.constant = self.itemTableView.contentSize.height
}
}
有了这种方法,当我从REST加载数据后调用self.itemTableView.reloadData()时,高度约束设置为表内容的高度,这很棒。
这过去在许多项目中都对我有用,但是由于某种原因,它在最新的Swift 4中没有起作用。是否有所改变?为什么tableView reloadData()方法不调用viewWillLayoutSubviews()?
答案 0 :(得分:0)
问题是tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)在返回行之前没有调用self.view.setNeedsLayout()。