UIImagePickerController
デフォルトのステータスバーの動作をオーバーライドしようとしてサブクラス化し、結果がまちまちです。私のアプリは、View Controller ベースのステータス バーの外観を使用しています。
サブクラス化しないと、ピッカーが閉じられたときにステータスバーのスタイルがDefault
(暗い)に変更されることがわかりました。最初のView Controllerでまだ試したことはありません。また、表示中にピッカーがステータス バーを非表示にして上にスライドすると、初期ビュー コントローラーのナビゲーション バーが高さ 64 から 44 にスライドします。
したがって、UIImagePickerController
サブクラスでステータスバーのスタイルを維持しLightContent
、スライドナビゲーションバーを回避するために、ピッカーを表示している間ステータスバーを表示したままにし、次に非表示にしviewDidAppear:
ます。
最初の興味深い点はpreferredStatusBarStyle
、ピッカーのサブクラスでは、オーバーライドして nil を返すprefersStatusBarHidden
までまったく呼び出されなかったということです。これは、通常、 aがそれらをオーバーライドしており、おそらく内部の子ビューコントローラーを返すことを示しているようです。のビュー階層を見ると、確かに子があり、それに対応するコントローラーが存在する可能性があります。残念ながら、このコントローラーをオーバーライドすることはできません。childViewControllerForStatusBarStyle
childViewControllerForStatusBarHidden
UIImagePickerController
viewDidAppear:
PLImagePickerCameraView
childViewControllerFor...
これらのメソッドをオーバーライドすると、preferredStatusBarStyle
とprefersStatusBarHidden
の間で呼び出され、実際に と のステータス バーを表示したままにすることができます。2つ目の興味深い点は、アニメーションの前にステータス バーが短時間点滅することです。それを防ぐように思われるinまたは他の場所への余分な呼び出しはありません。viewWillAppear:
viewDidAppear:
LightContent
presentViewController
setNeedsStatusBarAppearanceUpdate
viewWillAppear:
viewDidLoad:
3 番目の興味深い点は、解雇中にバーのスタイルがまだ暗く設定されてsetNeedsStatusBarAppearanceUpdate
いるviewWillDisappear:
ことviewDidDisappear:
です。
tl;dr - オンデマンドでステータス バーを非表示にして表示するようにオーバーライドUIImagePickerController
すると、かなりうまく機能することがわかりましたが、バー スタイルの設定には問題があります。ピッカークラスまたはUINavigationController
それ自体の何かが自動的にDefault
バースタイルを優先しており、却下時にそれに切り替わると、元に戻すのが難しいようです。
質問UIImagePickerController がステータスバーの外観を壊す を見たことがありますが、そこで見たものはまだ役に立たず、iOS8.1 では修正されていません。ピッカーを黒に設定するとうまくいくと確信してnavigationBar.barStyle
いましたが、サイコロはありませんでした。アイデアはありますか?
(また、ステータスバーが非表示のときに のナビゲーションバーが 44 の高さまでスライドするのを防ぐためのヒントUINavigationController
は役に立ちます)