我正在展示一个带有交互式消除过渡的模态UINavigationController.父视图控制器具有暗状态栏,模态视图控制器具有亮状态栏.我正在使用基于iOS 7视图控制器的状态栏外观配置.
只要我出现并且非交互式地关闭视图控制器,一切正常.但是,当我启动交互式关闭转换并取消它时,状态栏颜色仍然很暗.
我创建了一个sample project.点击“菜单”按钮,然后从右侧屏幕边缘平移开始交互式转换.
我试过的事情:
>在转换取消后,在涉及的任何导航和视图控制器上调用-setNeedsStatusBarAppearanceUpdate
>将navigationBar.barStyle更改为UIBarStyleDefault并返回到UIBarStyleBlack
我还验证了我的模态导航控制器的statusBarStyle设置正确:
(lldb) p (UIStatusBarStyle) [[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentedViewController] preferredStatusBarStyle] (UIStatusBarStyle) $8 = UIStatusBarStyleLightContent
状态栏仍为黑色.
还有什么可以尝试的吗?
解决方法
对我来说,这看起来像是UINavigationController中的一个错误(
rdar://15902745).取消解雇后,UINavigationController不会再次查询其presentViewController的preferredStatusBarStyle,而是使用来自自身的preferredStatusBarStyle.我通过覆盖-childViewControllerForStatusBarStyle解决了这个问题:
- (UIViewController*)childViewControllerForStatusBarStyle { if (self.presentedViewController) { return self.presentedViewController.childViewControllerForStatusBarStyle; } return [super childViewControllerForStatusBarStyle]; }
然后,为了在解雇期间(而不是之后)对变化进行动画处理,我还覆盖了-preferredStatusBarStyle.
我将解决方法推到了sample project.