我有一个tableView,它可以在内容到达底边时附加从Web服务器加载的数据。 为简单起见,让我们假设tableView保持固定(不滚动),直到网页加载完成。
要插入新单元格,我首先更新dataSource(对象数组),然后使用新添加的cell-indexPaths调用insertRowsAtIndexPaths:
。
我注意到的是:
__ BEFORE_APPEND
__ 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
addedItems
是一个包含新解析的项目的NSArray
addedIndexPaths
包含当前部分中itemCollection.count -> itemCollection.count + addedItems.count
的indexPaths