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

标签 ios swift ipad

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

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 函数不会被触发。

根据我所做的一些小研究,它似乎与尺寸类别有关! 尺寸类不涵盖 iPad 纵向和横向之间的差异:它们都有常规宽度和常规高度,因此不会调用 willTransition 函数。

此问题的简单简短解决方法是什么?

最佳答案

尝试使用 viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) 代替。

当 View Controller 管理的 View 的大小发生变化时,即使大小类没有变化,也会调用它。

如果您的布局取决于正在完成的转换,您可以在转换完成后执行更新:

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

关于ios - 在 iPad 上处理旋转到横向模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48645116/

相关文章:

ios - 程序收到信号 sigkill 但错误消失

javascript - Meteor 应用程序构建奇怪的文件;没有js/css资源

iphone - 错误 : Creating Tab-Navigation programmatically

iOS:仅从特定用户获取最新的推文文本

ios - NSDateFormatter 中的 AM/PM 问题

ios - -[GCKCastDeviceProvider stopDiscovery] 必须在主线程上调用

ios - 在哪里保存我的 iOS 应用程序的保存文件

ios - 随机生成的 key 中包含的 Firebase 查询十六进制代码

ios - 导航栏未显示

iphone - UIScrollView 将触摸发送到 subview