更改选项卡时忽略自动旋转

时间:2011-03-14 16:16:21

标签: iphone uitabbarcontroller orientation autorotate

我有一个带有UITabBarController的应用程序,每个选项卡都有一个“附加”的UINavigationController。现在让我们假设选项卡1,2和4中的rootViewControllers(navigationControllers)仅支持纵向方向,并且具有这样的“shouldAutorotateToInterfaceOrientation”实现,当要求旋转为纵向时,该实现仅返回YES。但是,Tab 3在其navigationController中有一些viewControllers,支持横向。

当我现在进入标签3并移动到支持横向的viewControllers之一时,我可以将设备和界面更改为横向。然而,如果我在横向模式下使用界面点击标签1,2或4,则界面不会变回纵向但保持横向,尽管显示的viewControllers显然只支持肖像。

我不确定我缺少什么或者这是否是预期的行为,我希望通过tabBarController切换到仅肖像viewController后,界面方向切换回肖像。整个层次结构是以编程方式构建的。

谢谢!

1 个答案:

答案 0 :(得分:1)

我在其中一个应用上遇到了与您相同的问题,不同之处在于我没有在标签项中使用导航控制器。

我最终为UITabBarController创建了一个类别(因为它并不意味着要被子类化),因为方法应该是@Autorotate ...

@implementation UITabBarController (orientation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
#if DEBUG 
    NSLog(@"UITabBarController (orientation) -> shouldAutorotateToInterfaceOrientation: [%d]",toInterfaceOrientation);
#endif  
    //if(toInterfaceOrientation == UIInterfaceOrientationPortrait) return YES;
//  else return [self.selectedViewController shouldAutorotateToInterfaceOrientation:toInterfaceOrientation];
    if (self.selectedViewController == [self.viewControllers objectAtIndex:kLibraryStoreTabIndex])
        return NO;


    if( self.selectedViewController == [self.viewControllers objectAtIndex:kContactTabIndex]){

        return YES;
    }
// rest of the conditions depending of the tab 

return NO; //last option 
}