UICollectionView在旋转后修复分页位置

时间:2013-10-31 16:16:21

标签: rotation position uicollectionview paging offset

我有一个带有

框架的UICollectionView
[UIScreen mainScreen].bounds

和这些属性:

_collectionView.pagingEnabled = YES;
_collectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

单元格也具有集合视图的大小。旋转时,集合视图的contentOffset不适合新方向。它仍然具有与旋转前相同的偏移量。

为了解决这个问题,我在didRotate方法中手动更改了contentOffset。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    _collectionView.contentOffset = CGPointMake(_newContentOffsetX, _collectionView.contentOffset.y);
}

这很有效,但看起来很糟糕。我也试图滚动到当前的IndexPath,但它有同样丑陋的行为:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    [_collectionView scrollToItemAtIndexPath:_currentIndexPath atScrollPosition:UICollectionViewScrollPositionLeft animated:NO];
}

我需要一个干净的过渡以及在旋转设备时更新集合视图的内容偏移的行为。

2 个答案:

答案 0 :(得分:3)

更好使用

willAnimateRotationToInterfaceOrientation:duration:

调用此方法时,视图控制器视图的边界已更新为当前设备方向。似乎这个方法在旋转动画块内部被调用。这意味着您将在 willAnimateRotationToInterfaceOrientation:duration:中设置的所有位置都是动画的。

这对我有很大的帮助,我用它来更新我的视图控制器查看旋转时的内容插入。奇迹般有效! : - )

答案 1 :(得分:-1)

请尝试更新didRotateFromInterfaceOrientation中的contentOffset,而不是使用willRotateToInterfaceOrientation。 您需要确保使用您要旋转的其他宽度/高度尺寸进行补偿,因为它还没有完成旋转。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    _collectionView.contentOffset = CGPointMake(_newContentOffsetX, _collectionView.contentOffset.y);
}