交互式视图控制器解除和更改statusBarStyle不兼容?

Ort*_*ntz 7 cocoa-touch statusbar uiviewcontroller uikit ios

我正在展示一个UINavigationController带有交互式消除过渡的模态.父视图控制器具有暗状态栏,模态视图控制器具有亮状态栏.我正在使用基于iOS 7视图控制器的状态栏外观配置.

只要我出现并且非交互式地关闭视图控制器,一切正常.但是,当我启动交互式关闭转换并取消它时,状态栏颜色仍然很暗.

我创建了一个示例项目.点击"菜单"按钮,然后从右侧屏幕边缘平移开始交互式转换.

我试过的事情:

  • -setNeedsStatusBarAppearanceUpdate在取消转换后调用所涉及的任何导航和视图控制器
  • 将navigationBar.barStyle更改为UIBarStyleDefault和返回UIBarStyleBlack

我还验证了我的模态导航控制器的statusBarStyle设置正确:

(lldb) p (UIStatusBarStyle) [[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentedViewController] preferredStatusBarStyle]
(UIStatusBarStyle) $8 = UIStatusBarStyleLightContent
Run Code Online (Sandbox Code Playgroud)

状态栏仍为黑色.

还有什么可以尝试的吗?

Ort*_*ntz 6

对我来说,这看起来像一个bug(rdar:// 15902745)UINavigationController.取消解雇后UINavigationController不会再次查询它presentedViewController,preferredStatusBarStyle但是使用preferredStatusBarStylefrom本身.我通过覆盖来解决这个问题-childViewControllerForStatusBarStyle:

- (UIViewController*)childViewControllerForStatusBarStyle {
    if (self.presentedViewController) {
        return self.presentedViewController.childViewControllerForStatusBarStyle;
    }

    return [super childViewControllerForStatusBarStyle];
}
Run Code Online (Sandbox Code Playgroud)

然后,为了在解雇期间(而不是之后)制作变化动画,我也覆盖了-preferredStatusBarStyle.

我将解决方法推送到示例项目.