更新:解決済み。下部の修正を参照してください。
すべての向きをサポートする私の iPad アプリでは、アプリが横向きで読み込まれると、奇妙なことが起こります。
- 残りの部分は横向きですが、アラート ビューは縦向きに表示されます
- iPad を横向きから縦向きに回転させても、回転はトリガーされません (また、shouldAutorotate スタイル メソッドもトリガーされません)。
- iPad を 180 度 (「別の横向き」に) 回転させると、回転がトリガーされ、その後、iPad は通常のように動作します (つまり、回転すると縦向きと横向きに正しく回転します)。
下のアラートビュー画面。変、変。なぜこれが起こっているのでしょうか?横向きでロードした場合にのみ発生します。縦向きでロードしてから横向きに回転すると問題なく動作します。
解決策:この問題は、アプリの読み込みが完了するとすぐに (より具体的には、アプリのviewDidAppear:
メソッドで) メイン ビュー コントローラーの上に UIViewController を (モーダルに) 追加していたために発生しました。
iOS はshouldAutorotateToInterfaceOrientation:
、起動後に現在/メインのビュー コントローラーに (4) 回の呼び出しを送信し、現在サポートされている向きを特定します。他の VC をすぐに追加したとき、これは前述のコールの途中で発生しました。したがって、私は1つまたは2つの呼び出ししか受けませんでした(「ポートレート」について、ポートレートで始まるため)。
その後、メインのビュー コントローラーは横向きのデフォルトのサポートが "NO" のままでしたが、新しく追加されたビュー コントローラー (向きについても尋ねられます) は喜んで "はい" と応答するようになりました。
もう一方の VC (横向き) を削除していたら、メインのビュー コントローラーが縦向きで止まっていることに気付きました。そのため、縦向きのビューがあり、その上に横向きのビューがありました。アラートなどは前者の方向性に注意を払っていたため、上記の悲惨な結果になりました。
さらに、縦向きに回転しようとすると、メインのビュー コントローラーが既に縦向きになっているため、回転できませんでした。他のView Controllerがすでに横向きになっているため、横向きに回転することもできませんでした。「ランドスケープですが、他のもの」の回転を行った場合にのみ、両方のビューコントローラーが回転が必要であることに同意し、デバイスが回転しました。
私の場合の修正は、他のコントローラーの作成を少し遅らせることでした。using performSelector:withObject:afterDelay.
-- 0 は機能しているように見えましたが、念のために 1 にしました。メインの VC が表示され、次に別の VC が表示されるという、少し奇妙に見えますが、上記よりは優れています。