UICollectionView:在指定的索引处添加项目并滚动到此项目

时间:2014-04-14 13:38:26

标签: ios objective-c uicollectionview

我为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根本不滚动。

1 个答案:

答案 0 :(得分:0)

如果您使用的是performBatchUpdate,则无需重新加载数据。从完成块中删除[self.collectionView reloadData];,它应该有效。