我希望我的标签栏应用程序在横向模式下有三个选项卡,但第三个选项卡必须是纵向。我最终使用
将整个应用转换为横向- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
在每个视图控制器中,标签栏应用程序要求其所有子视图控制器都处于格局中。
我的.plist文件首先有Landscape选项,然后添加了portrait。
如何将第三个标签旋转为纵向?
答案 0 :(得分: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上发布了这个子类,所以你可以复制这个方法或者只是从here获取.h / .m文件