在iPad上处理旋转到横向模式

By simon at 2018-02-07 • 0人收藏 • 85人看过

为了处理旋转在我的应用程序中,我使用以下方法:

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {

    collectionView2.collectionViewLayout.invalidateLayout()

    let pageControl = UIPageControl()
    let indexPath = IndexPath(item: pageControl.currentPage, section: 0)

    DispatchQueue.main.async {
        self.collectionView2.scrollToItem(at: indexPath, at: .centeredHorizontally, animated: true)
        self.collectionView2.reloadData()
    }
}
现在,我正在运行应用程序在iPhone设备上,方法是 触发完美,布局不受旋转的影响。 但是,当我运行它一个iPad和我旋转到风景,布局不是 管理中心的UI内容[在我的情况下collectionView]。但是当我旋转回肖像,布局完全重新居中。 由于某种原因,它似乎是willTransition功能没有得到 当旋转到横向时触发。 在我做的一些小的研究上,似乎它与Size类有关! Size classes不包括iPad的肖像和风景之间的区别: 因此它们都具有规则宽度和规则高度willTransition函数 不会被调用。 这个问题简单的解决方法是什么?

3 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

由于您快速走动,您可以尝试注册随附的通知 每一个旋转。

NotificationCenter.default.addObserver(self, selector:
#selector(YOUR_SELECTOR), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
并执行y我们的选择
if UIDeviceOrientationIsPortrait(UIDevice.current.orientation) {
    print("Portrait")
}

if UIDeviceOrientationIsLandscape(UIDevice.current.orientation) {
    print("Landscape")
}

2018-02-07   #2

尝试使用viewWillTransition(大小:CGSize,协调员: UIViewControllerTransitionCoordinator)。 这叫做when由视图控制器管理的视图的大小改变, 即使尺码类别没有改变。 如果你的布局取决于过渡正在完成,你可以执行 转换完成后的更新:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    coordinator.animate(alongsideTransition: nil) { _ in
        // perform your updates
    }
} 

2018-02-07   #3

由于您快速走动,您可以尝试注册随附的通知 每一个旋转。

NotificationCenter.default.addObserver(self, selector:
#selector(YOUR_SELECTOR), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)
并执行y我们的选择
if UIDeviceOrientationIsPortrait(UIDevice.current.orientation) {
    print("Portrait")
}

if UIDeviceOrientationIsLandscape(UIDevice.current.orientation) {
    print("Landscape")
}

登录后方可回帖

Loading...