iOS 13 UIWindowScene 如何锁定方向?



我想使用 SceneDelegate、UIWindowScene、UIWindowSceneDelegate 和其他与 UIScene 相关的东西。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
window = UIWindow.init(frame: windowScene.coordinateSpace.bounds)
window?.windowScene = windowScene
let vc = UIStoryboard(name: "FCBottomTabBar", bundle: nil).instantiateInitialViewController()!
window?.rootViewController = vc
window?.makeKeyAndVisible()
}

如何动态锁定此窗口的方向?例如,仅适用于portrait?动态意味着在运行时,当用户与某些内容交互时,方向会锁定回所有内容。

例如,对于屏幕 A,我只需要锁定为纵向。对于屏幕 B 仅横向。

从"设备方向"开始,最初将其设为纵向。

在 AppDelegate 中,创建一个变量"方向",并将其值设置为 UIInterfaceOrientationMask.portrait

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
var orientation = UIInterfaceOrientationMask.portrait
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
return orientation
}
}

现在在您想要的视图控制器中写下这个来改变方向

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
(UIApplication.shared.delegate as! AppDelegate).orientation = .landscapeLeft
let value = UIInterfaceOrientation.landscapeLeft.rawValue
UIDevice.current.setValue(value, forKey: "orientation")

}

希望对您有所帮助。

另一个答案似乎过于复杂,并且使用私有API。在视图控制器中,要设置支持的方向,只需覆盖supportedInterfaceOrientations

例如,要将其锁定为纵向:

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
.portrait
}

相关内容

  • 没有找到相关文章

最新更新