在单独的 UIWindow 中锁定状态栏方向
Posted
技术标签:
【中文标题】在单独的 UIWindow 中锁定状态栏方向【英文标题】:Lock status bar orientation in separate UIWindow 【发布时间】:2017-04-07 20:55:06 【问题描述】:我有一个案例需要在我的应用程序中创建一个新的UIWindow
。我还希望将新窗口锁定为纵向,但我的应用的原始窗口应该不锁定为纵向。
我正在像这样设置我的新窗口:
newWindow = UIWindow(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height))
newWindow?.rootViewController = ViewController2()
newWindow?.makeKeyAndVisible()
而ViewController2
使用以下方式锁定方向:
override var shouldAutorotate: Bool
return false
问题是,当显示新窗口,并且用户旋转设备时,应用程序本身会锁定纵向,但状态栏会旋转到横向模式:
如何确保状态栏在我的新窗口中也锁定为纵向?
如果有人想在一个简单的项目中看到这一点:https://github.com/rajohns08/StatusBar
【问题讨论】:
【参考方案1】:使用此文档解决您的问题 https://developer.apple.com/reference/uikit/uiinterfaceorientationmask
或 解决方案在应用程序委托中。您可以分别为每个窗口处理支持的方向:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
// check, which window is asking and return the mask
return UIInterfaceOrientationMaskAllButUpsideDown;
【讨论】:
我最终使用了这个委托方法,但是检查传递给该方法的窗口不起作用。我必须检查 UIApplication 的 keyWindow 并返回适当的掩码。 @AdamJohns 你还做了什么让它工作?我试过了,状态栏仍然为我旋转。以上是关于在单独的 UIWindow 中锁定状态栏方向的主要内容,如果未能解决你的问题,请参考以下文章