我正在尝试处理 UICollectionViewController 中的界面方向更改。我想要实现的是,我希望在界面旋转后拥有相同的 contentOffset 。意思是,它应该根据边界变化的比率而改变。
从纵向开始,内容偏移量为 { bounds.size.width * 2, 0} ...</p>

...应该导致横向内容偏移也与 { bounds.size.width * 2, 0} (反之亦然)。

计算新的偏移量不是问题,但不知道在哪里(或何时)设置它,以获得平滑的动画。我所做的是使布局无效willRotateToInterfaceOrientation:duration:并重置内容偏移量didRotateFromInterfaceOrientation::
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                duration:(NSTimeInterval)duration;
{
    self.scrollPositionBeforeRotation = CGPointMake(self.collectionView.contentOffset.x / self.collectionView.contentSize.width,
                                                    self.collectionView.contentOffset.y / self.collectionView.contentSize.height);
    [self.collectionView.collectionViewLayout invalidateLayout];
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
{
    CGPoint newContentOffset = CGPointMake(self.scrollPositionBeforeRotation.x * self.collectionView.contentSize.width,
                                           self.scrollPositionBeforeRotation.y * self.collectionView.contentSize.height);
    [self.collectionView newContentOffset animated:YES];
}
这会更改旋转后的内容偏移量。
如何在旋转期间设置它?我试图设置新的内容偏移量,willAnimateRotationToInterfaceOrientation:duration:但这会导致非常奇怪的行为。
可以在我的GitHub项目中找到一个示例。