ビューコントローラが回転をサポートするには、その階層内のすべてのビューコントローラが回転をサポートしている必要があります。
向きの変更への対応のドキュメントから:
ウィンドウは適切なViewControllerを探し、そのshouldAutorotateToInterfaceOrientation:
メソッドを呼び出して、新しい方向をサポートしているかどうかを判断します。
コンテナビューコントローラは、このメソッドをインターセプトし、独自のヒューリスティックを使用して、方向の変更が発生するかどうかを判断する場合があります。たとえば、タブバーコントローラは、すべての管理対象ビューコントローラが新しい方向をサポートしている場合にのみ方向の変更を許可します。
さらに、単一の画面を管理するために複数のViewControllerを使用しないでください。
View Controllerプログラミングガイドのドキュメントから(私の強調):
ビューコントローラとそのビュー階層内のビューの間の1対1の対応は、重要な設計上の考慮事項です。同じビュー階層の異なる部分を管理するために、複数のコンテンツビューコントローラを使用しないでください。同様に、単一のコンテンツビューコントローラオブジェクトを使用して、複数の画面に相当するコンテンツを管理しないでください。
この場合、親View Controllerで回転処理を無効にし、子View Controllerを単純なビューに変更し(上記の基準を満たすため)、方向の変更を手動で監視して子Viewのレイアウトを更新することをお勧めします。
UIDeviceOrientationDidChangeNotification
通知を聞くことで、向きの変化を監視できます。コード例:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(yourSelector:)
name:UIDeviceOrientationDidChangeNotification object:nil];
アップデート
「プッシュ」とは、ビューコントローラーをナビゲーションビューコントローラーにプッシュすることを意味する場合は、応答の2番目の部分を無視してください。
この場合、回転処理をサポートするために、shouldAutorotateToInterfaceOrientation:
戻るナビゲーションコントローラーとビューコントローラーのメソッドをオーバーライドしていることを確認する必要があります。YES