UICollectionView在旋转后修复分页位置

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

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

最佳答案 它更好使用

willAnimateRotationToInterfaceOrientation:duration:

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

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

点赞