UITableView insertRowsAtIndexPaths:中断scrollToTop /滚动行为

时间:2014-05-21 16:15:46

标签: ios objective-c uitableview uiscrollview

我有一个tableView,它可以在内容到达底边时附加从Web服务器加载的数据。 为简单起见,让我们假设tableView保持固定(不滚动),直到网页加载完成。

要插入新单元格,我首先更新dataSource(对象数组),然后使用新添加的cell-indexPaths调用insertRowsAtIndexPaths:

我注意到的是:

__ BEFORE_APPEND

  • " scrollToTop"功能按预期工作(状态栏点击)并一直滚动到顶部。

__ AFTER_APPEND

  • " scrollToTop"不再工作了。 tableView向上滚动(内容向下),但在圆形顶部附近停留在底部附近的空格处。

  • insertRowsAtIndexPaths:导致tableView向下滚动(内容上升)

关于scrollToTop我已经尝试覆盖scrollViewShouldScrollToTop:,返回NO并通过调用tableView上的[setContentOffset:CGPointMake(0, -tableView.contentInset.top)]手动滚动。 < - 给我留下了相同的结果。

在我看来,插入行会破坏contentSize,以便在插入(或删除)后,scrollView不知道实际有多大!?

有人看到同样的问题吗?

如何插入行(不调用reloadData)以便之后scrollToTop功能正常工作+ scrollView保持在插入前的确切位置。

在UICollectionView +自定义布局中追加项目时,scrollToTop功能不会中断。但是,插入引起的滚动也会出现在collectionViews中。 < - BAD

感谢您的帮助!

- 编辑 -

一些示例代码:

[self.tableView beginUpdates];

[itemCollection addObjectsFromArray:addedItems];
[self.tableView insertRowsAtIndexPaths:addedIndexPaths
                      withRowAnimation:UITableViewRowAnimationFade];

[self.tableView endUpdates];

说明: 代码在网络回调中执行。

itemCollection包含tableView

中显示的项目(dataSource)

addedItems是一个包含新解析的项目的NSArray

addedIndexPaths包含当前部分中itemCollection.count -> itemCollection.count + addedItems.count的indexPaths

0 个答案:

没有答案