iOS 6 Tab Bar App:shouldAutorotate无效

Lau*_*ück 3 uitabbarcontroller uiinterfaceorientation ios6

我正在使用iOS 6和Xcode 4.5在Storyboard中使用标签栏和一些导航视图控制器开发应用程序

通常应用程序应支持所有界面方向,但我有两个视图,只应支持纵向模式.

所以我将以下代码添加到视图控制器:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}
Run Code Online (Sandbox Code Playgroud)

在我在iOS 6上开发的没有故事板和导航视图控制器的其他应用程序上它可以工作,但她不是!:/

我希望有人可以提供帮助,因为我找到了其他一些无用的帖子......

来自德国的问候

Laurenz

编辑:

我也尝试过 - 不行!:

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;

} 
Run Code Online (Sandbox Code Playgroud)

Jon*_*han 6

据我所知,出现这个问题是因为UITabBarController和UINavigationController返回了自己的默认值 - (BOOL)shouldAutorotate和 - (NSUInteger)supportedInterfaceOrientations.

一种解决方案是通过类别(或仅仅是子类)扩展这两个类,以便在视图控制器中从这些方法的自己的实现中返回适当的值.这对我有用(你可以把它放到你的App代表中):

@implementation UITabBarController(AutorotationFromSelectedView)

- (BOOL)shouldAutorotate {
    if (self.selectedViewController) {
        return [self.selectedViewController shouldAutorotate];
    } else {
        return YES;
    }
}

- (NSUInteger)supportedInterfaceOrientations {
    if (self.selectedViewController) {
        return [self.selectedViewController supportedInterfaceOrientations];
    } else {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
}

@end

@implementation UINavigationController(AutorotationFromVisibleView)

- (BOOL)shouldAutorotate {
    if (self.visibleViewController) {
        return [self.visibleViewController shouldAutorotate];
    } else {
        return YES;
    }
}

- (NSUInteger)supportedInterfaceOrientations {
    if (self.visibleViewController) {
        return [self.visibleViewController supportedInterfaceOrientations];
    } else {
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
}
@end
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有视图控制器都将继续自动旋转.在应该只支持纵向模式的两个视图控制器中,实现以下内容:

-(BOOL)shouldAutorotate {
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}
Run Code Online (Sandbox Code Playgroud)