我有一个只有 4 个视图控制器的小应用程序,我想在用户切换到横向时更改布局。我想出了如何检查景观,但该功能存在于一个 viewController 类中,我不清楚如何让我的其他 viewController 在 viewWillTransition 触发时采取行动。我是否在每个视图控制器类中放置了该覆盖函数的一个版本来执行特定于它的事情?当我尝试在 segue 之后将覆盖放在两个类中时,它们都被解雇了,并且感觉不是“正确的做法”,所以我想问专家。
在应用程序启动时使用下面的代码,我设置了一个全局布尔值,以确定它是否处于横向状态,并使用 viewWillTransition 来检测更改。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
print("Will Transition to size \(size) from super view size \(self.view.frame.size)")
if (size.width > self.view.frame.size.width) {
print("Landscape")
inLandscapeMode = true
} else {
print("Portrait")
inLandscapeMode = false
}
if (size.width != self.view.frame.size.width) {
DispatchQueue.main.async {
// DO SOMETHING LIKE reload a Table/Collection view to ensure no dequeued cells have old constraints... self.tableView.reloadData()
}
}
}
func setUpFormatting(){
let size = UIScreen.main.bounds.size
print("On App Start size \(size)")
if size.width > size.height {
print("Landscape")
inLandscapeMode = true
} else {
print("Portrait")
inLandscapeMode = false
}
}
所有的