gpt4 book ai didi

ios - 即使对于有效的 indexPath,在 reloadRowsAtIndexPaths 之后并不总是调用 cellForRowAtIndexPath

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:26 24 4
gpt4 key购买 nike

我有一个带有单元格的表格 View ,当用户点击单元格上的 subview 时可以展开这些单元格。

为了扩展单元格,我调用 reloadRowsAtIndexPaths 传递单元格的索引路径数组。

我发现这在大多数情况下都有效,但有时单元格不会更新。仔细研究后,我发现在这些故障单元的情况下,永远不会调用 cellForRowAtIndexPath

据我所知,细胞扩张的正常顺序是

*expandCellAtIndexPath: -> reloadRowsAtIndexPaths:withRowAnimation: -> tableView:cellForRowAtIndexPath:*

reloadRowsAtIndexPathscellForRowAtIndexPath 之间,调用了 tableView:heightForRowAtIndexPath: 我在其中包含了受影响单元格的更新高度。

除了在表上的 heightForRowAtIndexPath 之后,永远不会调用 cellForRowAtIndexPath 之外,对于故障情况,序列基本相同(就我可以逐步执行的代码而言) .

导致故障情况下tableview展开了cell但是内容还没有更新,导致用户体验很差。

有没有人在 UITableView 的单元格更新中遇到过这个问题,或者我是否遗漏了一些明显的东西?

  • 有几点需要注意:

    1. 当 reloadRowsAtIndexPaths 在两者中执行时,每个单元格的 indexPath 都是有效的(它不是 nil 并且指向 tableview 中的单元格)功能和故障场景。

    2. 我的测试表明,同一行在扩展期间总是会触发错误条件,无论它位于何处在 TableView 的可见部分内。

最佳答案

虽然我仍然不能确切地说出 UITableView 在做什么,但我终于开始工作了。

高级:

  1. 有 2 个错误,一个与核心数据相关,另一个错误假设计算前者暴露的行高。

  2. 不幸的是,当一个细胞被展开。在我遇到的情况下,它导致了目标将单元格的位置推到 tableview 的可见区域之外。

  3. 不知何故(这部分我不明白),UITableView 实际上并没有将单元格移出可见区域但它停止发送它cellForRowAtIndexPath 消息(这是预期的,因为单元格是不再可见)。

一旦我找到了错误,渲染问题就消失了。

顺便说一下,感谢 Hot Licks,您的建议让我为受影响部分中的所有单元格添加了大量日志消息,这就是我发现其中一个前任单元格的高度偏离的原因。

如果有人遇到类似症状,我建议实现

tableView:didEndDisplayingCell:forRowAtIndexPath:

UITableViewDelegate 协议(protocol)的方法,并检查不再接收 cellForRowAtIndexPath 的单元格是否作为该消息的参数结束。

关于ios - 即使对于有效的 indexPath,在 reloadRowsAtIndexPaths 之后并不总是调用 cellForRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438983/

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