4

我有一个 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];
}

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

4

2 回答 2

3

最好使用

willAnimateRotationToInterfaceOrientation:duration:

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

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

于 2014-06-26T16:13:08.883 回答
-1

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

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
    _collectionView.contentOffset = CGPointMake(_newContentOffsetX, _collectionView.contentOffset.y);
}
于 2014-04-27T01:50:49.613 回答