我试图在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
答案 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
有效,否则您仍会收到同样的错误。