gpt4 book ai didi

ios - CellForRowAtIndexPath 被意外调用

转载 作者:行者123 更新时间:2023-11-28 14:24:59 27 4
gpt4 key购买 nike

我有一个包含超过 12 种不同类型单元格的表格 View 。我正在使用 self 调整大小并且所有单元格的约束都已正确设置。在 iPhone 模拟器上一切正常,但在 iPad 模拟器上一切正常,直到

  1. 我单击 TableView 中的链接,然后显示外部浏览器。
  2. 我点击主页按钮并将应用置于后台。

一旦我返回/重新打开应用程序,表格 View 会自动滚动到随机位置,而且,一旦应用程序进入后台,就会多次调用 cellForRowAtIndexPath(仅针对周围的索引/包括显示单元格的索引),看起来表格 View 会在应用程序进入后台后立即自动滚动。

我 100% 确定 tableview.reloadData() 没有在任何地方调用,applicationDidEnterBackground 也没有实现。

想知道是否有人遇到过同样的问题,可能的潜在原因是什么?我使用 XCode 9.3、iOS 版本 9.3 和 11.3 的 iPad 模拟器进行了测试。

场景如下所示,

scenario

最佳答案

我明白了原因,这是因为估计的高度不准确,而且 tableview 正在做一些奇怪的事情。 IOS 8 UITableView self-sizing cells jump/shift visually when a new view controller is pushed

我通过缓存单元格高度解决了这个问题,如果未缓存高度,则在 estimatedHeightForRow 中返回 UITableViewAutomaticDimension,如果已缓存,则返回缓存高度。

伪代码 - Swift 4:

var cellEstimatedHeightCache = [Int: CGFloat]()

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
guard let height = cellEstimatedHeightCache[indexPath.row] else {
return UITableViewAutomaticDimension
}

return height
}

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cacheCellHeight(row: indexPath.row, height: cell.frame.size.height)
}

private func cacheCellHeight(row: Int, height: CGFloat) {
cellEstimatedHeightCache[row] = height
}

关于ios - CellForRowAtIndexPath 被意外调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51671641/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com