swift - 当您有多个视图控制器时如何检测到横向的转换
问题描述
我有一个只有 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
}
}
所有的
解决方案
您可以在每个视图控制器中获取设备方向并通过该值设置视图
if UIDevice.current.orientation == .portrait {
} else if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight {
}
推荐阅读
- javascript - 会话用户有时具有价值有时未定义
- android - 使用 android studio 创建自定义形状?
- python - 过滤包含 NaN 值的数据框,结果为空数据框
- javascript - 鼠标滚轮触发时多次触发函数
- ajax - 如何防止多个ajax?
- javascript - 如何在javascript中重置变量
- cmake - 如何检查为什么在 find_package() 中拒绝 cmake 配置
- caching - Redis 缓存显示状态未连接
- laravel - 需要让 Laravel 通过 http 而不是 https 发送它的 curl 请求
- javascript - 应用程序在 IE 11 中使用企业模式中断