IO6不调用 - (BOOL)shouldAutorotate

时间:2012-10-21 08:46:02

标签: iphone objective-c ios ios6 uiinterfaceorientation

我在我的应用中有一些观点,我不想支持方向。 在didFinishLaunchingWithOptions我添加导航:

...
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.viewController];

    self.window.rootViewController = nav;
    [self.window makeKeyAndVisible];
...

每个ViewController我都有UITabBar(我不知道这是否重要)。

在第一个视图控制器中,我添加:

-(BOOL)shouldAutorotate {
        return NO;
    }

    - (NSUInteger)supportedInterfaceOrientations {
        return UIInterfaceOrientationMaskPortrait;
    }
在视图加载时调用

supportedInterfaceOrientations,但shouldAutorotate在我旋转设备时没有调用 我在这里缺少什么?

2 个答案:

答案 0 :(得分:15)

这是因为UITabBarcontrollerUINavigationController都没有将shouldAutorotate传递给它的可见视图控制器。要解决这个问题,你可以继承UITabBarController或UINavigationController并从那里转发shouldAutorotate:

在您的子类UITabBarController中添加:

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

在您的子类UINavigationController中添加:

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

答案 1 :(得分:0)

AppDelegate中的

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window  // iOS 6
{

return UIInterfaceOrientationMaskAll;


}
在ViewController中

- (BOOL)shouldAutorotate {
return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}