我有一个带有UITabBarController的应用程序,每个选项卡都有一个“附加”的UINavigationController。现在让我们假设选项卡1,2和4中的rootViewControllers(navigationControllers)仅支持纵向方向,并且具有这样的“shouldAutorotateToInterfaceOrientation”实现,当要求旋转为纵向时,该实现仅返回YES。但是,Tab 3在其navigationController中有一些viewControllers,支持横向。
当我现在进入标签3并移动到支持横向的viewControllers之一时,我可以将设备和界面更改为横向。然而,如果我在横向模式下使用界面点击标签1,2或4,则界面不会变回纵向但保持横向,尽管显示的viewControllers显然只支持肖像。
我不确定我缺少什么或者这是否是预期的行为,我希望通过tabBarController切换到仅肖像viewController后,界面方向切换回肖像。整个层次结构是以编程方式构建的。
谢谢!
答案 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
}