我正在对UIImagePickerController
进行子类化,以尝试覆盖其默认状态栏行为并获得混合结果。我的应用程序使用基于视图控制器的状态栏外观。
没有子类化,我发现它在取消选择器时将状态栏样式更改为Default
(暗),而我在初始视图控制器中尝试的任何东西都没有修复它。此外,当选择器在显示时隐藏状态栏,向上滑动状态栏时,初始视图控制器的导航栏会从高度64到44向上滑动。
所以我希望我的UIImagePickerController
子类将状态栏样式保持为LightContent
,并试图解决滑动导航栏,在显示选择器时保持状态栏显示,然后将其隐藏在viewDidAppear:
。
第一个有趣的事情是我的选择器子类中的preferredStatusBarStyle
和prefersStatusBarHidden
根本没有被调用,直到我覆盖childViewControllerForStatusBarStyle
和{{1返回nil。这似乎表明通常情况下,childViewControllerForStatusBarHidden
会覆盖那些,可能会返回内部子视图控制器。查看UIImagePickerController
中的视图层次结构,肯定有一个孩子viewDidAppear:
,并且很可能有一个控制器可以使用它。遗憾的是,我们无法覆盖此控制器。
覆盖PLImagePickerCameraView
个方法,childViewControllerFor...
和preferredStatusBarStyle
会在prefersStatusBarHidden
和viewWillAppear:
之间进行调用,并且确实可以保持状态栏可见viewDidAppear:
。然而,第二个有趣的事情是在LightContent
动画之前状态栏短暂闪烁黑暗。 presentViewController
或setNeedsStatusBarAppearanceUpdate
等其他地方viewWillAppear:
的任何额外电话似乎都无法阻止。{/ p>
第三个有趣的事情是在解雇过程中条形样式仍然设置为黑暗,并且在选择器viewDidLoad:
或{{1}中没有额外调用setNeedsStatusBarAppearanceUpdate
似乎阻止了这一点。
tl; dr - 我发现覆盖viewWillDisappear:
以隐藏&显示状态栏按需工作得很好,但设置栏样式是有问题的。选择器类中的某些东西或viewDidDisappear:
本身会自动更喜欢UIImagePickerController
条形样式,当它在解雇时切换到它时,似乎很难将其切换回来。
我见过问题UIImagePickerController breaks status bar appearance,我在那里看到的任何内容都没有帮助,iOS8.1也没有解决它。我确信将选择器的UINavigationController
设置为黑色可以做到,但没有骰子。任何人的想法?
(另外,当状态栏被隐藏时,任何阻止Default
导航栏滑动到44高度的提示都会很有用thx)