UIImagePickerController与状态栏iOS8

时间:2014-12-23 23:53:45

标签: ios cocoa-touch uikit ios7-statusbar uipickerviewcontroller

我正在对UIImagePickerController进行子类化,以尝试覆盖其默认状态栏行为并获得混合结果。我的应用程序使用基于视图控制器的状态栏外观。


没有子类化,我发现它在取消选择器时将状态栏样式更改为Default(暗),而我在初始视图控制器中尝试的任何东西都没有修复它。此外,当选择器在显示时隐藏状态栏,向上滑动状态栏时,初始视图控制器的导航栏会从高度64到44向上滑动。

所以我希望我的UIImagePickerController子类将状态栏样式保持为LightContent,并试图解决滑动导航栏,在显示选择器时保持状态栏显示,然后将其隐藏在viewDidAppear:

第一个有趣的事情是我的选择器子类中的preferredStatusBarStyleprefersStatusBarHidden根本没有被调用,直到我覆盖childViewControllerForStatusBarStyle和{{1返回nil。这似乎表明通常情况下,childViewControllerForStatusBarHidden会覆盖那些,可能会返回内部子视图控制器。查看UIImagePickerController中的视图层次结构,肯定有一个孩子viewDidAppear:,并且很可能有一个控制器可以使用它。遗憾的是,我们无法覆盖控制器。

覆盖PLImagePickerCameraView个方法,childViewControllerFor...preferredStatusBarStyle会在prefersStatusBarHiddenviewWillAppear:之间进行调用,并且确实可以保持状态栏可见viewDidAppear:。然而,第二个有趣的事情是在LightContent动画之前状态栏短暂闪烁黑暗。 presentViewControllersetNeedsStatusBarAppearanceUpdate等其他地方viewWillAppear:的任何额外电话似乎都无法阻止。{/ p>

第三个有趣的事情是在解雇过程中条形样式仍然设置为黑暗,并且在选择器viewDidLoad:或{{1}中没有额外调用setNeedsStatusBarAppearanceUpdate似乎阻止了这一点。


tl; dr - 我发现覆盖viewWillDisappear:以隐藏&显示状态栏按需工作得很好,但设置栏样式是有问题的。选择器类中的某些东西或viewDidDisappear:本身会自动更喜欢UIImagePickerController条形样式,当它在解雇时切换到它时,似乎很难将其切换回来。

我见过问题UIImagePickerController breaks status bar appearance,我在那里看到的任何内容都没有帮助,iOS8.1也没有解决它。我确信将选择器的UINavigationController设置为黑色可以做到,但没有骰子。任何人的想法?

(另外,当状态栏被隐藏时,任何阻止Default导航栏滑动到44高度的提示都会很有用thx)

0 个答案:

没有答案