我正在子类UIImagePickerController
化以尝试覆盖其默认状态栏行为并产生混合结果。我的应用程序使用基于视图控制器的状态栏外观。
如果没有子类别,我发现它Default
在拆除采摘器时会将状态栏样式更改为(DALK),而我在初始视图控制器中却没有尝试过修复它。同样,当拾音器在出现时隐藏状态栏时,将其向上滑动时,初始视图控制器的导航栏将其从64号高到44处滑动。
因此,我希望我的UIImagePickerController
子类将状态栏样式保持为LightContent
,并且为了解决滑动导航栏的问题,在呈现选择器时保持状态栏显示,然后将其隐藏在viewDidAppear:
.
第一个有趣的事情是,preferredStatusBarStyle
在prefersStatusBarHidden
我的选择器子类中根本没有调用,直到我也覆盖childViewControllerForStatusBarStyle
并childViewControllerForStatusBarHidden
返回 nil。这似乎表明通常, aUIImagePickerController
会覆盖那些,可能会返回一个内部子视图控制器。查看 中的视图层次结构viewDidAppear:
,肯定有一个孩子PLImagePickerCameraView
,而且很可能有一个控制器与之配套。遗憾的是我们不能覆盖这个控制器。
覆盖这些childViewControllerFor...
方法,preferredStatusBarStyle
并且确实在andprefersStatusBarHidden
之间被调用,并且确实可以使状态栏保持可见 and 。第二个有趣的事情是,在动画之前,状态栏会短暂闪烁。没有多少额外的电话到in或其他地方,例如似乎阻止了这种情况。viewWillAppear:
viewDidAppear:
LightContent
presentViewController
setNeedsStatusBarAppearanceUpdate
viewWillAppear:
viewDidLoad:
第三个有趣的事情是,酒吧风格在解雇期间仍然设置为黑暗,并且setNeedsStatusBarAppearanceUpdate
在选择器中没有额外的调用viewWillDisappear:
或viewDidDisappear:
似乎阻止了这种情况。
tl;博士——我发现UIImagePickerController
按需隐藏和显示状态栏可以很好地工作,但是设置栏样式是有问题的。选择器类中的某些东西或UINavigationController
它本身会自动更喜欢Default
条形样式,当它在关闭时切换到该样式时,似乎很难将其切换回来。
我已经看到 Question UIImagePickerController breaks status bar appearance,我在那里看到的没有任何帮助,iOS8.1 没有修复它。我确信将选择器设置navigationBar.barStyle
为黑色会做到这一点,但没有骰子。有什么想法吗?
(此外,在隐藏状态栏时防止导航栏滑动到 44 高度的任何提示UINavigationController
都会很有用,谢谢)