【问题标题】:UICollectionView fix paging position after rotationUICollectionView 在旋转后修复分页位置
【发布时间】:2013-11-11 18:16:48
【问题描述】:

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

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

【问题讨论】:

    标签: rotation position uicollectionview paging offset


    【解决方案1】:

    最好使用

    willAnimateRotationToInterfaceOrientation:duration:
    

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

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

    【讨论】:

    • 此方法已弃用
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 2015-12-20
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多