我开始工作的应用程序支持所有设备方向,除了视图,这是景观。
要强制此方向,我通过AppDelegate设置lanscape方向值:
AppDelegate.swift
var shouldSupportAllOrientation = true
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
if (shouldSupportAllOrientation == true){
return UIInterfaceOrientationMask.all
}
return UIInterfaceOrientationMask.landscape
}
ViewController.swift
let appdelegate = UIApplication.shared.delegate as! AppDelegate
appdelegate.shouldSupportAllOrientation = false
let value = UIInterfaceOrientation.landscapeRight.rawValue
UIDevice.current.setValue(value, forKey: "orientation")
但是,当应用程序导航到其他视图控制器,并且设备处于纵向(物理)时,视图将以横向模式显示,直到设备旋转为止。
有没有办法检测'真实的设备方向'?
谢谢
答案 0 :(得分:0)
我遇到了类似的问题。
强制UIDevice.current.orientation
后,设备似乎无法再对其进行更新(由于它是一种只能获取的属性,并且代表物理方向,因此看起来是预期的)
尝试覆盖ViewController.swift中的supportedInterfaceOrientations:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .landscape
}
此后,如果您打开此VC,则interfaceOrientation
是横向的,而UIDevice.current.orientation
是真实的。
请注意:如果使用框架和边界,则可能需要翻转视图的宽度和高度。