scrollToItemAtIndexPath 无法正常工作
Posted
技术标签:
【中文标题】scrollToItemAtIndexPath 无法正常工作【英文标题】:scrollToItemAtIndexPath not working properly 【发布时间】:2014-01-07 16:38:59 【问题描述】:我正在尝试使用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];
不幸的是,这仅适用于集合中的前两项,如果我滚动到假设第五项并旋转设备,它会再次旋转到一些奇怪的单元格间位置。
知道我做错了什么吗?
【问题讨论】:
我不知道什么不适合您,对我来说似乎应该可以,但是我建议您使用现成的库来显示照片库,因为它如此常见的任务,拥有如此出色的代码,并根据需要对其进行重构。我已经完成了很多项目,其中包括一个画廊,并且重构人们大量工作的“战斗硬化”代码通常是时间高效的,例如 MWPhotoBrowser 您找到解决问题的方法了吗? 我在 ios 6 上遇到了完全相同的问题。但它在 iOS 7 中已修复。 【参考方案1】:我在 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];
【讨论】:
以上是关于scrollToItemAtIndexPath 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
scrollToItemAtIndexPath 破坏 UICollectionViewCell 布局
UICollectionView - 分离 scrollViewDidScroll 和 scrollToItemAtIndexPath
scrollToItemAtIndexPath 无法正常工作
UICollectionView scrollToItemAtIndexPath
如何知道 UICollectionView 是不是会在 scrollToItemAtIndexPath: 被调用后实际滚动?