UICollectionView滚动到项目

时间:2013-06-18 14:07:38

标签: ios uicollectionview

我试图在UICollectionView中记住项目的索引(indexPath.item),稍后在替换视图然后恢复后,滚动到该记忆项目。

当记忆项目时,indexPath和indexPath.item是:

indexPath is: <NSIndexPath 0x1d87b380> 2 indexes [0, 32]
indexPath.item is: 32

稍后为该项重新计算indexPath时,indexPath和indexPath.item为:

indexPath is: <NSIndexPath 0x1d8877b0> 2 indexes [0, 32]
item is: 32

我尝试使用以下方式滚动到记忆位置:

NSIndexPath *iPath = [NSIndexPath indexPathForItem:i inSection:0];
[self collectionView scrollToItemAtIndexPath:iPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];

我收到错误:

attempt to scroll to invalid index path

1 个答案:

答案 0 :(得分:11)

你打电话给[self.collectionView reloadData]; 在尝试滚动到indexPath之前?

如果要在reloadData完成时重新定位indexPath,请将代码放在如下的块中:

[UIView animateWithDuration:0
        animations: ^{ [self.collectionView reloadData]; }
        completion:^(BOOL finished) {
                      NSIndexPath *iPath = [NSIndexPath indexPathForItem:i inSection:0];
                      [self collectionView scrollToItemAtIndexPath:iPath atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:NO];
 }];

在致电scrollToItemAtIndexPath之前,您还可以检查部分中的项目数量以确保i有效,否则您仍会收到同样的错误。