【发布时间】:2013-12-24 16:40:21
【问题描述】:
我有一个表格视图,其中的单元格可以在用户点击单元格上的子视图时展开。
为了扩展单元格,我调用 reloadRowsAtIndexPaths 传递单元格的 indexPath 数组。
我发现这在大多数情况下都有效,但有时单元格不会更新。 挖掘了一下,我发现在这些有问题的单元格的情况下,永远不会调用 cellForRowAtIndexPath。
据我所知,细胞膨胀的正常顺序是
*expandCellAtIndexPath: -> reloadRowsAtIndexPaths:withRowAnimation: -> tableView:cellForRowAtIndexPath:*
在 reloadRowsAtIndexPaths 和 cellForRowAtIndexPath 之间,有一个对 tableView:heightForRowAtIndexPath: 的调用,其中包含受影响单元格的更新高度。
错误情况的顺序大致相同(就我可以逐步完成的代码而言),除了在桌子上的 heightForRowAtIndexPath 之后,cellForRowAtIndexPath 永远不会被调用.
结果是table view展开了cell但是在故障情况下内容没有更新,导致用户体验很差。
有没有人遇到过 UITableView 上的单元格更新问题,或者我遗漏了一些明显的东西?
-
有几点需要注意:
当 reloadRowsAtIndexPaths 执行时,每个单元格的 indexPath 都是有效的(它不是 nil 并且指向 tableview 中的一个单元格) 功能和故障场景。
我的测试表明,同一行在扩展期间总是会触发故障条件,无论它位于何处 在表格视图的可见部分。
【问题讨论】:
-
您是否可能在两次调用之间更改部分中的行数?停止 numberOfRowsInSection 并查看它的调用频率以及返回的内容。
-
不,在 reloadRowsAtIndexPaths 调用之前和之后,每个部分的行数保持不变。
-
你检查确定了吗?
-
是的,我记录了每个部分的计数,它在 reloadRowsAtIndexPaths 前后保持不变。总行数也保持不变。
标签: ios iphone objective-c uitableview