5

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}}(これは問題がない場合です)。

ご清聴ありがとうございました!

4

1 に答える 1

3

カメラから画像を取得する画像ピッカーを表示するときに、iPhoneで同じ問題に遭遇しました。私が見つけた解決策は、画像ピッカーをポップアップしたビューが再表示されるときにステータスバーを表示するように呼び出すことでした。例えば。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}
于 2012-10-29T07:50:29.357 に答える