为什么手动重用UITableViewCell会在行重新加载时消失?

Han*_*nes 5 uitableview reuseidentifier

如果我UITableViewCell使用reuseidentifier = nil作为ivar 保持固定并返回特定行的此实例,然后专门使用重新加载此行[tableView reloadRowsAtIndexPaths:withRowAnimation:],则行内容消失(或有时闪烁).当我向外滚动并返回时,它再次变得可见.[tableView reloadData]另一方面,如果我这样做,它就不会消失.

  • 当我重新加载行时,它为什么会消失?
  • 当我重装整张桌子时为什么不呢?

这是一个示例项目:https://github.com/hannesoid/HOTableViewTests

我在iOS 6上对此进行了测试. 我知道通常不推荐以这种方式手动重用UITableViewCell(没有使用useidentifier和dequeueing),但在一些非常静态的情况下,它会简化操作.

Mar*_*rio 1

UITableView 经过 Apple 优化,因此它使用相当少量的内存,但当单元格出现在屏幕上时仍然具有良好的性能。当你做这样的非标准事情并规避优化时,你就会使整个机器陷入困境。这是我的建议。如果您现在将某一特定行作为实例变量保存,为什么不简单地尝试为其reuseIdentifier 指定一个唯一的名称呢?让套件解决这个问题。