为啥 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做?

Posted

技术标签:

【中文标题】为啥 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做?【英文标题】:Why does beginUpdates/endUpdates reset tableView postion and how to stop it from doing so?为什么 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做? 【发布时间】:2011-08-13 00:56:47 【问题描述】:

我在 UITableView 和

中使用 NSFetchedResultsController
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
and 
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

我根据苹果文档调用了 beginUpdates/endUpdates。问题是似乎每次进行此调用时都会将表格位置重置为顶部。有什么想法为什么要这样做,以及是否有办法避免表位置重置?

谢谢

【问题讨论】:

【参考方案1】:

你不能直接调用[myTableView reloadData];而不是beginUpdates/endUpdates吗?也许有些东西我没有得到......

【讨论】:

如果我插入 100 行,我会在每次插入后调用 reloadData 100 次会发生什么?【参考方案2】:

例如可以保存当前行的indexPath

NSIndexPath *pastIP=[NSIndexPath indexPathForRow:0 inSection:0]

更新后

[tableView selectRowAtIndexPath:pastIP animated:YES scrollPosition:UITableViewScrollPositionTop];

【讨论】:

这会不会像上面提到的那样将表格滚动到顶部,然后只将其滚动回过去的 IP,从而在 tableView 中产生向上/向下的效果?不是那么理想。 我的意思是,更新后您仍会看到表格滚动到顶部,然后按照您上面的建议滚动回最后一个 indexPath,这看起来有点有趣? 看看这个bit.ly/assXmb如果它不能解决你的问题,回来找我,会做点什么..

以上是关于为啥 beginUpdates/endUpdates 会重置表视图位置以及如何阻止它这样做?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?