1

UIImagePickerControllerデフォルトのステータスバーの動作をオーバーライドしようとしてサブクラス化し、結果がまちまちです。私のアプリは、View Controller ベースのステータス バーの外観を使用しています。


サブクラス化しないと、ピッカーが閉じられたときにステータスバーのスタイルがDefault(暗い)に変更されることがわかりました。最初のView Controllerでまだ試したことはありません。また、表示中にピッカーがステータス バーを非表示にして上にスライドすると、初期ビュー コントローラーのナビゲーション バーが高さ 64 から 44 にスライドします。

したがって、UIImagePickerControllerサブクラスでステータスバーのスタイルを維持しLightContent、スライドナビゲーションバーを回避するために、ピッカーを表示している間ステータスバーを表示したままにし、次に非表示にしviewDidAppear:ます。

最初の興味深い点preferredStatusBarStyle、ピッカーのサブクラスでは、オーバーライドして nil を返すprefersStatusBarHiddenまでまったく呼び出されなかったということです。これは、通常、 aがそれらをオーバーライドしており、おそらく内部の子ビューコントローラーを返すことを示しているようです。のビュー階層を見ると、確かに子があり、それに対応するコントローラーが存在する可能性があります。残念ながら、このコントローラーをオーバーライドすることはできません。childViewControllerForStatusBarStylechildViewControllerForStatusBarHiddenUIImagePickerControllerviewDidAppear:PLImagePickerCameraView

childViewControllerFor...これらのメソッドをオーバーライドすると、preferredStatusBarStyleprefersStatusBarHiddenの間で呼び出され、実際に と のステータス バーを表示したままにすることができます。2つ目の興味深い点は、アニメーションの前にステータス バーが短時間点滅することです。それを防ぐように思われるinまたは他の場所への余分な呼び出しはありません。viewWillAppear:viewDidAppear:LightContentpresentViewControllersetNeedsStatusBarAppearanceUpdateviewWillAppear:viewDidLoad:

3 番目の興味深い点は、解雇中にバーのスタイルがまだ暗く設定されてsetNeedsStatusBarAppearanceUpdateいるviewWillDisappear:ことviewDidDisappear:です。


tl;dr - オンデマンドでステータス バーを非表示にして表示するようにオーバーライドUIImagePickerControllerすると、かなりうまく機能することがわかりましたが、バー スタイルの設定には問題があります。ピッカークラスまたはUINavigationControllerそれ自体の何かが自動的にDefaultバースタイルを優先しており、却下時にそれに切り替わると、元に戻すのが難しいようです。

質問UIImagePickerController がステータスバーの外観を壊す を見たことがありますが、そこで見たものはまだ役に立たず、iOS8.1 では修正されていません。ピッカーを黒に設定するとうまくいくと確信してnavigationBar.barStyleいましたが、サイコロはありませんでした。アイデアはありますか?

(また、ステータスバーが非表示のときに のナビゲーションバーが 44 の高さまでスライドするのを防ぐためのヒントUINavigationControllerは役に立ちます)

4

0 に答える 0