【问题标题】:How to Update TableView and its parent ScrollView Height according to its content如何根据其内容更新 TableView 及其父 ScrollView 高度
【发布时间】:2018-11-12 12:39:29
【问题描述】:

我有一个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!

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

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

请帮帮我。提前致谢。

【问题讨论】:

    标签: ios swift uitableview swift3 swift3.2


    【解决方案1】:

    像这样重新排序,因为应该在更新约束的常量之后调用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- 布局视图

    在获取数据后执行此操作

    【讨论】:

    • 感谢您的回答。我试过了,但结果没有变化
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-18
      • 2013-03-10
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2014-08-19
      • 2019-12-03
      • 1970-01-01
      相关资源
      最近更新 更多