2つのタブをUITabBarController
ベースコントローラーとして持つアプリがあります。UINavigationController
タブのメインビューコントローラーは両方とも縦向きと横向きの両方をサポートしますが、孫ビューは横向きのみである必要があります。
私が抱えている問題は、孫のビューに入る前にポートレートで開始すると、ChildViewController's
shouldAutorotateToInterfaceOrientation
ランドスケープモードでのみYESを返しても、孫のビューがポートレートで表示されることです。つまり、ナビゲーションバーは、デバイスが縦向きモードであるかのようにデバイスの上部に表示され、新しいViewControllerは強制的な方向に回転されません。次のようになります。
| [Navigation bar] |
| |
| View contents |
| |
| |
| |
正しい向きのレイアウトの代わりに:
| [Navigation bar] |
| |
| View contents, rotated |
孫ビューが正しい方向で表示されていることを確認するにはどうすればよいですか?これが私がすべてを設定する方法です:
// first creating one of two view controllers used for the tabbar
UINavigationController *firstNavController = [[UINavigationController alloc] init];
ContentOneListController *listController = [[[ContentOneListController alloc] initWithNibName:@"ContentOneView" bundle:nil] autorelease];
listController.tabBarItem.title = @"One";
firstNavController.viewControllers = [NSArray arrayWithObject:listController];
// view controllers are added to the tabbar controller here (ivar of the class)
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:
firstNavController, secondNavController, nil];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
// later on, I add a child view controller onto ContentOneListController
NSArray *viewControllers = tabBarController.viewControllers;
NSInteger selectedIndex = [tabBarController selectedIndex];
UINavigationController *selectedNavController = [viewControllers objectAtIndex:selectedIndex];
// ChildViewController only supports landscape orientation
ChildViewController *childController = [[[ChildViewController alloc] initWithNibName:@"ChildView" bundle:nil] autorelease];
[selectedNavController pushViewController:controller animated:NO];
ContentOneListController's
shouldAutorotateToInterfaceOrientation
縦向きと横向きの両方をサポートする場合はYESを返しますが、ChildViewController's
shouldAutorotateToInterfaceOrientation
横向きの場合のみYESを返します。
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return (orientation == UIInterfaceOrientationLandscapeLeft ||
orientation == UIInterfaceOrientationLandscapeRight);
}