【问题标题】:heightForRowAtindexPath not called after tableView.beginUpdates in ios 15在 ios 15 中的 tableView.beginUpdates 之后未调用 heightForRowAtindexPath
【发布时间】:2021-12-03 14:31:20
【问题描述】:

iOS 15 之前我做了之后

self.tableView.beginUpdates()
self.tableView.endUpdates()

方法 heightForRowAtindexPath 被调用并且我的单元格高度发生了变化,而没有重新加载单元格中的数据。现在在 iOS 15 中这不起作用!如何在不重新加载此单元格中的数据的情况下强制重新加载 tableview 单元格高度?

【问题讨论】:

  • 完全一样的问题。几分钟前才发现。暂时将 beginUpdated() 和 endUpdates() 替换为 reloadData() 直到找到解决方案
  • 您需要提供有关您的代码的更多信息。快速测试,它按预期工作。
  • 旁注... Apple 的文档声明 “尽可能使用 performBatchUpdates(_:completion:) 方法而不是这个方法。”
  • @DonMag , performBatchUpdates(_:completion:) 也不起作用
  • 我还没有升级到 iOS 15 的设备,但这在 iPhone 模拟器上运行良好:pastebin.com/PgWPN6QX

标签: ios swift ios15


【解决方案1】:

我已经解决了这个问题。显然,Apple 改变了处理更新和调整单元大小的方式。

由于“隐藏”单元格保留为0,发送beginUpdate时,它只处理值大于0的单元格,因此不再调整它们。

您需要做的是将隐藏单元格返回的值 0 更改为 0.01,然后您就完成了!

我希望这个解决方案对我也一样。

【讨论】:

    【解决方案2】:

    找到解决办法:

    1. heightForRowAtindexPath 方法中返回可调整大小的单元格 UITableView.automaticDimension 而不是大小
    2. 在我的自定义 tableView 单元格中,我为容器视图添加了高度约束(在我的例子中是 webView)
    3. 在我获取单元格大小并需要更新高度的地方(对于我来说,在加载 webView 内容之后),我更新了高度约束:

    .

    cell.heightContraint.constant = size
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
    

    所以现在单元格可以通过 UITableView.automaticDimension 高度自动调整大小,当然,您的视图/容器视图的顶部和底部约束应该等于单元格的顶部和底部约束

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多