iPad アプリがすべての向きをサポートするセットアップがあります。アプリケーションの一部では、タップはナビゲーション コントローラーを必要とするモーダル ビュー コントローラーの表示をトリガーします。だから私は基本的にやっています:
UIViewController *myViewController = [[UIViewController alloc] initWithNibName:@"MyView" bundle:nil];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:myViewController];
NSLog(@"%d", nav.interfaceOrientation);
[window.rootViewController presentModalViewController:nav animated:YES];
これは、iPad が縦向き (ホーム ボタン) の場合に正常に機能します。他の方向では、モーダル ビューは常にデバイスの現在の底面ではなく、ホーム ボタンから縦向きに表示されます。
ナビゲーション コントローラーを完全にスキップしてmyViewController
モーダルに表示すると、正しく表示されます。
そこで、UINavigationViewController をサブクラス化し、shouldAutorotate:
andsupportedInterfaceOrientations:
メソッドを明示的にオーバーライドしようとしましたが、効果はありません。興味深いことに、viewWillAppear
メソッドをオーバーライドしてプロパティの値をログに記録すると、上記のコードからアクセスしたときに正しい値が返されたとしても、interfaceOrientation
常に返されます。1
Info.plist ですべての向きがサポートされていることも確認しました。
では、この動作を引き起こすために他に何が起こっているのでしょうか? どんな助けでも大歓迎です。