0

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);
}
4

3 に答える 3

1

これを修正する方法は、この質問で提案されているようにビュー変換を調整することです。

iPhoneの向きを設定するための文書化された方法はありますか?

于 2011-01-16T19:26:49.710 に答える
0

サブクラスUITabBarController化して実装shouldAutorotateToInterfaceOrientationする

于 2011-01-07T20:52:44.283 に答える
0

私はあなたが必要なことを正確に行うことを可能にする拡張機能を書きました:https ://github.com/piercifani/TabBarBetterRotation

于 2012-08-18T19:54:14.670 に答える