UICollectionView insertItemsAtIndexPaths:似乎重新加载集合视图或自动滚动到顶部

UICollectionView insertItemsAtIndexPaths: seems to reload collectionview or autoscrolls to top

我正在结合使用 UICollectionViewNSFetchedResultsController。当我获取新数据时,我将它们放入 SQLite 数据库中,然后我的 frc 收到一个通知,它会更新。我实现了适当的委托方法并在批量更新中插入新数据,之后我不调用 reloadData。但是一旦插入数据,集合视图就会滚动到顶部(以使新项目可见?)。我想干预这个过程并模仿 Facebook/9Gag 实现。当有新数据时,一个按钮会淡入,让用户滚动到顶部。在显示按钮时,新项目已经插入,因此用户也可以自己向上滚动。我尝试了以下方法:

我尝试了同样的问题,方法是调用 "insertItemAtIndexPaths" 将数据递增到我的 collectionView 中。

我注意到两件事: - 如果您在当前可见索引路径之后添加项目,则不会自动滚动 - 如果您在当前可见索引路径之前添加项目,则不会像您所说的那样自动滚动,但 contentOffset 保持在同一位置,但具有不同的 contentSize,因为您刚刚添加了新项目。

为了处理这个 "side effect",我使用了这里提到的解决方案:UICollectionView insert cells above maintaining position (like Messages.app)

正如下面post所解释的,"CATransaction.setDisableAction(false)"是平滑更新contentOffset位置的关键。