如何根据其内容更新TableView及其父ScrollView高度

时间:2018-06-02 17:01:23

标签: ios swift uitableview swift3 swift3.2

我有UITableView设置为不启用滚动,它存在于UIScrollView中。我这样做是因为设计规范需要看起来像tableView的东西。具有动态高度的TableView单元格我使用

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

    return UITableViewAutomaticDimension
}

现在我从API和重新加载TableView之前获取数据。

我更新了tableViewScrollView的高度限制。但身高不会得到更新。我使用下面的代码

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

此处tvHeightConstraintsvHeightConstrainttableViewScrollView的高度限制

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

当我打印TableView ContentSize

时,日志始终显示为0
  print("Content Size: \(tvPrdtDetail.contentSize.height)")

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分: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-布局视图

获取数据后执行此操作

答案 1 :(得分:0)

尝试这个希望,这样就行了。当需要约束时应该更新,并且override updateConstraints函数

self.layoutIfNeeded()

override public func updateConstraints() {
    super.updateConstraints()
    tvHeightConstraint.constant = tvPrdtDetail.contentSize.height
    svHeightConstraint.constant = tvPrdtDetail.contentSize.height + 8
}