私のアプリにはUINavigationControllerがあり、回転をサポートしていません。ただし、回転をサポートする必要があるナビゲーションコントローラーの上にモーダルビューコントローラーを表示したいと思います。これは可能ですか?モーダルで表示されているViewControllerをオーバーライドしようとしshouldAutorotateToInterfaceOrientation
ましたが、機能していないようです。
3 に答える
shouldAutorotateToInterfaceOrientation
モーダルビューコントローラーが表示されているときに戻るようYES
に、ナビゲーションコントローラーshouldAutorotateToInterfaceOrientation
をオーバーライドする必要があると思います。それ以外の場合YES
は、モーダルビューコントローラーが表示されNO
ます。
デバイスがデバイスの向きの通知(UIDeviceOrientationDidChangeNotification)を生成することを確認する必要があります。
確実に:
generateDeviceOrientationNotificationsがtrueに設定されています
Appleドキュメントから:
「ウィンドウオブジェクトは、現在の方向の変更に関連する作業の多くを実行します。ただし、ルートビューコントローラと連携して、方向の変更を行う必要があるかどうか、発生する場合は、応答するために追加のメソッドを呼び出す必要があるかどうかを判断します。このコントローラーがコンテナーである場合、オリエンテーションを行うかどうかを決定するのは子供に依存する可能性があります。」
したがって、ルートビューコントローラー(UINavigationController?)が回転をサポートしていない場合、アプリの起動時にこれがfalseに設定される可能性があります。その場合、必要に応じてオンに戻す必要があります。
UIDevice myDevice = [UIDevice currentDevice];
[myDevice beginGeneratingDeviceOrientationNotifications];
別の投稿で答えを見つけました:ルートViewController内のUIViewControllerが回転していません
重要なのは
- (void)addChildViewController:(UIViewController *)childController
と
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers