0

我有一个UITableView设置为不启用滚动,它存在于UIScrollView. 我这样做是因为设计规范要求看起来像tableView. TableView具有动态高度的单元格所以我使用

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return UITableViewAutomaticDimension
}

现在,一旦我从 API 获取数据并在重新加载 TableView 之前。

tableView我更新了和的高度约束ScrollView。但是高度没有得到更新。我使用了下面的代码

self.view.layoutIfNeeded()
tvHeightConstraint.constant = tvPrdtDetail.contentSize.height
svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8

这里tvHeightConstraint和是和svHeightConstraint的高度约束tableViewScrollView

@IBOutlet weak var tvHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var svHeightConstraint: NSLayoutConstraint!

当我打印时,日志总是显示 0TableView ContentSize

  print("Content Size: \(tvPrdtDetail.contentSize.height)")

请帮帮我。提前致谢。

4

2 回答 2

0

试试这个希望这样它会起作用。当你需要约束时调用它应该更新,并且override updateConstraints函数

self.layoutIfNeeded()

override public func updateConstraints() {
    super.updateConstraints()
    tvHeightConstraint.constant = tvPrdtDetail.contentSize.height
    svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8
}
于 2018-06-02T18:14:15.513 回答
0

像这样重新排序,因为layoutIfNeeded应该在更新约束的常量之后调用

tvHeightConstraint.constant = tvPrdtDetail.contentSize.height 
svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8  //  remove this 
self.view.layoutIfNeeded()

也不需要第二行,就好像您在滚动视图中从上到下正确挂钩约束一样,更新表格的高度约束将更新滚动视图

编辑:

1-给桌子高度约束说3000(一些大数字),然后self.view.layoutIfNeeded()

2-重新加载表

3- 获取最后一个单元格的 y 帧

4-将其分配给高度约束

5-布局视图

获取数据后执行此操作

于 2018-06-02T17:03:10.597 回答