在单独的 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 中锁定状态栏方向的主要内容,如果未能解决你的问题,请参考以下文章

添加新 UIWindow 时以编程方式隐藏状态栏?

iOS9:自定义 UIWindow 使状态栏消失

将 UIView 或 UIWindow 放在状态栏上方

iOS9用自定义uiwindow覆盖状态栏 - 位置错误

iOS状态栏触摸返回App

iOS不得姐项目--封装状态栏指示器(UIWindow实现)