状态栏与 UIWindow 分开旋转

Posted

技术标签:

【中文标题】状态栏与 UIWindow 分开旋转【英文标题】:Status bar rotates separated from UIWindow 【发布时间】:2012-10-23 11:54:43 【问题描述】:

我必须用两个UIWindow 创建应用程序(请不要问为什么)。首先UIWindowrootViewController 支持所有方向。第二个 - 只有纵向和倒置。所以应用程序委托代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    // part one
    self.windowOne = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.windowOne.rootViewController = [[ViewControllerOne alloc] init]; // supports all orientations
    self.windowOne.rootViewController.view = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image1.png"]] autorelease];

    [self.windowOne makeKeyAndVisible];
    //~part one
    // part two
    self.windowTwo = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.windowTwo.rootViewController = [[ViewControllerTwo alloc] init]; // supports only portrait and upside down
    self.windowTwo.rootViewController.view = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image2.png"]] autorelease];

    [self.windowTwo makeKeyAndVisible];
    //~part two
    return YES;

如果两个部分中只有一个处于活动状态(第二个被评论)- 一切正常。但是如果 windowOne 在 windowTwo 之前已经成为 key 并且可见,windowTwo 会在 ViewControllerTwo 允许的情况下旋转,但状态栏的行为非常奇怪:它像 windowOne 一样旋转是 key 并且可见。

是否有任何选项可以让状态栏像ViewControllerTwo 所说的那样旋转?

【问题讨论】:

【参考方案1】:

虽然这对我来说是个 hack,但您可以尝试如下:

在您的视图控制器shouldAutorotateToInterfaceOrientation(适用于ios5)或shouldAutorotate(适用于iOS6)方法中添加以下代码行:

[[UIApplication sharedApplication] setStatusBarOrientation: interfaceOrientation animated: YES];

然后测试应用程序的行为。

要在(iOS6 的新功能)shouldAutorotate 方法中获取界面方向,请执行以下操作:

UIInterfaceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation];

我没有亲自测试这一切,但它可以工作。

(查看post 了解如何在 iOS6 下支持自动旋转)

【讨论】:

感谢您的回复。已尝试,但结果行为不稳定。有时,状态栏会出现在侧面,而不仅仅是顶部或底部。 嗯,您还可以尝试将 setStatusBarOrientation 代码也放入您的控制器 viewWillAppear/viewDidAppear 方法中。但最终这一切对我来说并不是最佳实践。 问题不在出现/消失时出现,而是在视图已经可见时快速设备旋转时出现。似乎描述的情况是无证行为。

以上是关于状态栏与 UIWindow 分开旋转的主要内容,如果未能解决你的问题,请参考以下文章

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

iOS状态栏触摸返回App

导航栏与状态栏

三步实现沉浸式状态栏(即状态栏与APP同色)

沉浸式状态栏与导航条

在 iOS 7 中让导航栏与状态栏重叠