为了在我的应用程序中处理旋转,我使用以下方法:
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/