0

横向きモードの 3 つのタブを持つタブ バー アプリケーションが必要ですが、3 つ目のタブは縦向きにする必要があります。私は最終的にアプリ全体を横向きに変換しました

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}

タブバーアプリケーションとして、すべてのView Controllerで、そのすべてのサブView Controllerを横向きにする必要があります。

私の .plist ファイルには、最初に横向きオプションがあり、次に縦向きオプションが追加されています。

縦向きに回転する 3 番目のタブを作成するにはどうすればよいですか?

4

1 に答える 1

2

残念ながら、UITabBarController は、異なる回転要件を持つビュー コントローラーをうまく処理できません。これを処理する最善の方法は、UITabBarController をサブクラス化し、shouldAutorotate で、画面上のビュー コントローラーに要求を渡すだけです。コードは次のようになります。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Let's grab an array of all of the child view controllers of this tab bar controller
NSArray *childVCArray = self.viewControllers;

// We know that at 5 or more tabs, we get a "More" tab for free, which contains, assumingly,
// a more navigation controller

if (self.selectedIndex <= 3) {
    UINavigationController *navController = [childVCArray objectAtIndex:self.selectedIndex];

    // We're in one of the first four tabs, which we know have a top view controller of UIViewController
    UIViewController *viewController = navController.topViewController;

    return [viewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
else {
    // This will give us a More Navigation Controller

    UIViewController *viewController = [childVCArray objectAtIndex:self.selectedIndex];

    return [viewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

return NO;
}

これは、5 つ以上のビュー コントローラーがタブ バーのナビゲーション コントローラーを使用しており、それ自体が独自の uinavigationcontroller に含まれていないことを前提としています。もしそうなら、このコードをそれに合わせて変更するのは簡単です。

このサブクラスを github に投稿したので、このメソッドをコピーするか、ここから .h/.m ファイルを取得してください。

于 2012-04-21T19:52:12.817 に答える