scrollToItemAtIndexPath无法正常工作

时间:2014-01-07 16:39:00

标签: ios objective-c uicollectionview autorotate

我正在尝试使用UICollectionView实现照片库。设置类似于此tutorial中的设置:单元格与集合视图一样大,因此您一次只能看到一张图片。分页已启用,因此您可以逐个图片滚动浏览图库。到目前为止一切正常。

我还想在设备旋转到横向时保留该设置。它在细胞/图像大小方面工作得很好。但是就像前面提到的教程中描述的那样,集合视图被旋转到两张图片之间的某个奇怪位置。

我的目标是让集合视图在旋转之后显示与旋转之前显示的相同的单元格。就像在post中一样。

我尝试解决此问题:

在旋转之前,我将当前可见项目的indexpath保存到属性,如下所示:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation     duration:(NSTimeInterval)duration {
   NSArray *visibleItems = [self.galleryCollectionView indexPathsForVisibleItems];
   self.currentIndexPath = [visibleItems lastObject];
   [self.galleryCollectionView.collectionViewLayout invalidateLayout];
}

旋转之后,我尝试滚动到该项目,如下所示:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
 [self.galleryCollectionView scrollToItemAtIndexPath:self.currentIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
}

不幸的是,这仅适用于集合中的前两个项目,如果我滚动到让第五个项目旋转并将设备旋转到一些奇怪的中间单元格位置。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:2)

我在iOS 6上遇到完全相同的问题,并且已经在iOS 7上修复了。这是适用于iOS 6的解决方法。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

    // workaround iOS 6 collection view rotation bug: UICollectionView is not scrolled to the correct index after rotation    
    [self.collectionView setContentOffset:[self.collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath:[NSIndexPath indexPathForRow:self.currentPage inSection:0]].frame.origin animated:NO];
}