我将UICollectionView
与NSFetchedResultsController
结合使用。当我获取新数据时,我将它们放入SQLite数据库中,我的frc会收到一条通知,告知它会更新。我实施了适当的委托方法,并在批量更新中插入新数据,之后我不会调用reloadData
。但是一旦插入数据,collectionview就会滚动到顶部(以使新项目可见?)。我想干涉这个过程并模仿Facebook / 9Gag的实现。当有新数据时,按钮会淡入,让用户滚动到顶部。在显示按钮时,新项目已经插入,因此用户也可以自己向上滚动。我尝试了以下方法:
UIScrollViewDelegate
方法,看看是否可以阻止collectionView滚动(在此更新过程中没有调用任何方法)willUpdate
时显示更多" - 按钮,并在按下按钮时插入项目。问题是用户无法向上滚动答案 0 :(得分:4)
我通过调用“insertItemAtIndexPaths”将数据增加到我的collectionView来实验同样的问题。
我注意到两件事: - 如果在当前可见索引路径之后添加项目,则不会自动滚动 - 如果你在当前可见的索引路径之前添加项目,就像你说的那样没有自动滚动,但是contentOffset保持在相同的位置,但是使用不同的contentSize,因为你刚刚添加了新的项目。
为了解决这个“副作用”,我使用了这里提到的解决方案:UICollectionView insert cells above maintaining position (like Messages.app)
正如以下帖子中所解释的那样,“CATransaction.setDisableAction(false)”是平滑更新contentOffset位置的关键。