UINavigationControllerを次のようにサブクラス化しました。
-(NSUInteger)supportedInterfaceOrientations {
return [self.topViewController supportedInterfaceOrientations];
}
-(BOOL)shouldAutorotate {
return self.topViewController.shouldAutorotate;
}
ただし、親とは異なる初期方向でViewControllerをプッシュすることに固執しました。私の場合、親ビューは縦向きのみです。
-(BOOL)shouldAutorotate {
return NO;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
ただし、プッシュされたビューが横向きのみであることを望みます。デバイスの向きを手動で変更した場合にのみ、そのように動作します。
-(BOOL)shouldAutorotate {
return YES;
}
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscape;
}
誰かが私を正しい方向に向けてくれてありがとう。(私は今のところハッキーな解決策しか持っていません...)
編集:
以下は、サブクラス化されたUINavigationControllerを開始する方法を示しています
PortraitView *vc = [[PortraitView alloc] init];
SubClassedNav *navController = [[SubClassedNav alloc] initWithRootViewController:vc];
[navController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
[self presentViewController:navController animated:YES completion:nil];
そして、私がその後どのように新しい見方を推し進めるか:
LandscapeView *vc = [[LandscapeView alloc] init];
[[self navigationController] pushViewController:vc animated:YES];