tl; dr:アプリがステータスバーを表示している場合、写真を撮っているときにiPadを回転させると、ユーザーインターフェイスのレイアウトが壊れます。
を介して写真を撮る必要があるステータスバーを表示するアプリがありますUIImagePickerController
。
私はこれをiPad3、iOS 6、Xcode4.51で実行しています
私が最初に気付いた問題は、ステータスバーを非表示にしないと
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
に電話する前に
[self presentViewController:imagePicker animated:YES completion:nil];
そうすると、UIImagePickerController
が画面に正しく表示されなくなります。ステータスバー用のスペースは引き続き予約されます(ただし、時間やバッテリーの情報などは表示されません)。その結果、画面の下端にあるコントロールが部分的に画面外になります。
だから、私は行を追加しました
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
を提示する前にUIImagePickerController
、最初の問題は解決されました。
次に、2番目の問題が発生します(最初の問題の解決によって引き起こされます)。を起動しUIImagePickerController
、iPadを回転させて閉じます(「キャンセル」または「使用」を介して、関係ありません)、ハンドラー(imagePickerControllerDidCancel
または imagePickerController:didFinishPickingMediaWithInfo:
呼び出され、ステータスバーを再度表示します。
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
問題は、ステータスバーが実際に表示されていることですが、アプリの残りの部分は、ステータスバーが再び画面に表示されていることに気付いていないようです。(「MainViewController」にあるUIToolbarは、ステータスバーの後ろに部分的に隠れています。)興味深いのは、iPadを他の方向に回転させると、アニメーションの終了後にすべてが正しく表示されることです。
この問題を解決するためのヒントを誰かに教えてもらえますか?(現在、私の最善の回避策は、誰かが最初に写真を撮った後にステータスバーを非表示にしておくことですが、それは一種の最適ではありません)。たぶん、最初の問題に対するより良い解決策、あるいは両方の問題を解決する方法があるかもしれません。
詳細情報:アクティブな状態でiPadを横向きに回転させた後UIImagePickerController
、これはMainViewControllerのビューフレームのフレームです:{{0、0}、{1024、768}}(つまり、問題がある場合)。iPadを常に横向きにしている場合、これは、が閉じられた後のMainViewControllerのビューフレームUIImagePickerController
です:{{0、0}、{1024、748}}(これは問題がない場合です)。
ご清聴ありがとうございました!