1

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


如果没有子类别,我发现它Default在拆除采摘器时会将状态栏样式更改为(DALK),而我在初始视图控制器中却没有尝试过修复它。同样,当拾音器在出现时隐藏状态栏时,将其向上滑动时,初始视图控制器的导航栏将其从64号高到44处滑动。

因此,我希望我的UIImagePickerController子类将状态栏样式保持为LightContent,并且为了解决滑动导航栏的问题,在呈现选择器时保持状态栏显示,然后将其隐藏在viewDidAppear:.

一个有趣的事情是,preferredStatusBarStyleprefersStatusBarHidden我的选择器子类中根本没有调用,直到我也覆盖childViewControllerForStatusBarStylechildViewControllerForStatusBarHidden返回 nil。这似乎表明通常, aUIImagePickerController会覆盖那些,可能会返回一个内部子视图控制器。查看 中的视图层次结构viewDidAppear:,肯定有一个孩子PLImagePickerCameraView,而且很可能有一个控制器与之配套。遗憾的是我们不能覆盖这个控制器。

覆盖这些childViewControllerFor...方法,preferredStatusBarStyle并且确实在andprefersStatusBarHidden之间被调用,并且确实可以使状态栏保持可见 and 。第二个有趣的事情是,在动画之前,状态栏会短暂闪烁。没有多少额外的电话到in或其他地方,例如似乎阻止了这种情况。viewWillAppear:viewDidAppear:LightContentpresentViewControllersetNeedsStatusBarAppearanceUpdateviewWillAppear:viewDidLoad:

第三个有趣的事情是,酒吧风格在解雇期间仍然设置为黑暗,并且setNeedsStatusBarAppearanceUpdate在选择器中没有额外的调用viewWillDisappear:viewDidDisappear:似乎阻止了这种情况。


tl;博士——我发现UIImagePickerController按需隐藏和显示状态栏可以很好地工作,但是设置栏样式是有问题的。选择器类中的某些东西或UINavigationController它本身会自动更喜欢Default条形样式,当它在关闭时切换到该样式时,似乎很难将其切换回来。

我已经看到 Question UIImagePickerController breaks status bar appearance,我在那里看到的没有任何帮助,iOS8.1 没有修复它。我确信将选择器设置navigationBar.barStyle为黑色会做到这一点,但没有骰子。有什么想法吗?

(此外,在隐藏状态栏时防止导航栏滑动到 44 高度的任何提示UINavigationController都会很有用,谢谢)

4

0 回答 0