UIImagePickerController与状态栏iOS8

UIImagePickerController尝试覆盖其默认状态栏的行为和混合结果。 我的应用程序使用基于视图控制器的状态栏外观。


没有子类,我发现当select器被解散时,它将状态栏样式更改为Default (黑暗),并且我在初始视图控制器中没有尝试过任何东西。 另外,当select器隐藏状态栏时,向上滑动,初始视图控制器的导航条从高度64上滑动到44。

因此,我希望我的UIImagePickerController子类保持状态栏的风格为LightContent并尝试解决滑动导航栏时,保持显示状态栏呈现select器,然后将其隐藏在viewDidAppear:

一个有趣的事情是,我的prefersStatusBarHidden子类中的preferredStatusBarStyleprefersStatusBarHidden根本没有被调用,直到我也覆盖了childViewControllerForStatusBarStylechildViewControllerForStatusBarHidden返回nil。 这似乎表明,通常, UIImagePickerController重写这些,可能会返回一个内部子视图控制器。 查看viewDidAppear:中的视图层次结构,当然有一个孩子PLImagePickerCameraView ,它可能有一个控制器去与它。 可悲的是,我们不能覆盖这个控制器。

覆盖那些childViewControllerFor...方法, preferredStatusBarStyleprefersStatusBarHiddenviewWillAppear:viewDidAppear:之间调用,确实可以保持状态栏可见和LightContent 。 然而, 第二件有趣的事情是,在presentViewControlleranimation之前,状态栏会短暂地眨眼睛。 在viewWillAppear:或者像viewDidLoad:这样的其他地方,没有额外的setNeedsStatusBarAppearanceUpdate额外的调用viewDidLoad:似乎阻止了这一点。

第三件有趣的事情是,在解雇期间,酒吧风格仍然被设置为黑暗,在select器的viewWillDisappear:没有额外的setNeedsStatusBarAppearanceUpdate调用viewWillDisappear:或者viewDidDisappear:似乎阻止了这一点。


tl; dr – 我发现覆盖UIImagePickerController来隐藏和显示状态栏按需工作很好,但设置栏样式是有问题的。 select器类或UINavigationController本身中的某些内容自动更喜欢Default栏样式,当它切换到解除时,似乎很难将其切换回去。

我看到了问题UIImagePickerController打破了状态栏的外观 ,没有看到有什么帮助,而且iOS8.1不能解决它。 我确定把picker的navigationBar.barStyle设置为黑色就可以了,但是没有骰子。 任何想法任何人?

(另外,当隐藏状态栏时,防止UINavigationController的导航栏滑动到44的高度的任何提示将是有用的thx)