UIDevice 设置方向不适用于 iPad

UIDevice set orientation not working on iPad

我想要实现的是,当用户按下按钮时,以编程方式模拟设备旋转到横向。 我的代码适用于 iPhone 设备但不适用于 iPad

let value = NSNumber(integerLiteral: UIDeviceOrientation.landscapeRight.rawValue)
UIDevice.current.setValue(value, forKey: "orientation")
ViewController.attemptRotationToDeviceOrientation()

有没有办法在 iPad 上实现同样的效果?

嗯,direct 解决方案非常简单,但它有一个缺点。通过在项目设置“常规”部分中将 需要全屏 设置为 true 来解决此问题。当然,这意味着您的应用不支持多任务处理,这可能不适合您的应用。

您如何检测设备方向的变化?如果你使用

func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator)

检测,那么iPad就不会调用了。你可以改用这个

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animate(alongsideTransition: { (_) in
        let orient = UIApplication.shared.statusBarOrientation
        if orient.isPortrait {
            // portrait now
        } else if orient.isLandscape {
            // landscape now
        }
    }, completion: nil)
    super.viewWillTransition(to: size, with: coordinator)
}