在一个视图控制器中强制横向方向后重置Xcode中的自动旋转(swift 4)

时间:2018-06-11 14:34:01

标签: ios swift xcode rotation device-orientation

我开始工作的应用程序支持所有设备方向,除了视图,这是景观。

要强制此方向,我通过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")

但是,当应用程序导航到其他视图控制器,并且设备处于纵向(物理)时,视图将以横向模式显示,直到设备旋转为止。

有没有办法检测'真实的设备方向'?

谢谢

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。 强制UIDevice.current.orientation后,设备似乎无法再对其进行更新(由于它是一种只能获取的属性,并且代表物理方向,因此看起来是预期的)

尝试覆盖ViewController.swift中的supportedInterfaceOrientations:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return .landscape
}

此后,如果您打开此VC,则interfaceOrientation是横向的,而UIDevice.current.orientation是真实的。 请注意:如果使用框架和边界,则可能需要翻转视图的宽度和高度。