我为UICollectionView
创建了一个垂直滚动自定义布局。通过经典拉动将项目添加到此集合中,以按字母顺序添加和显示。
如果我添加一个以Z字母开头的项目,它可能会放在集合的末尾,所以我希望集合自动滚动显示最后一个单元格。
目前我正在使用此代码:
[self.collectionView performBatchUpdates:^{
// Update the datasource
[self updateTasks];
// Insert the new item into the collection
[self.collectionView insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:[self.tasks indexOfObject:task] inSection:0]]];
} completion:^(BOOL finished) {
// reload data and scroll
[self.collectionView reloadData];
[self.collectionView scrollToItemAtIndexPath:@[[NSIndexPath indexPathForItem:[self.tasks indexOfObject:task] inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
}];
它有效...但正如您所见,我使用performBatchUpdates
添加我的项目。因此UICollectionView
会自动动画显示新单元格并移动其他单元格。
如果UICollectionView
必须滚动,则不显示此动画。可能是因为scrollview也是动画......
在您看来,哪个是在集合视图中插入项目并滚动到此新项目的最佳方式?我正在努力获得一个美丽而流畅的动画,以时尚的方式向用户展示其新项目。
编辑-------
如果我删除对reloadData
的调用,方法scrollToItemAtIndexPath
不起作用... uicollectionView根本不滚动。
答案 0 :(得分:0)
如果您使用的是performBatchUpdate,则无需重新加载数据。从完成块中删除[self.collectionView reloadData];
,它应该有效。