IO6不会调用 – (BOOL)shouldAutorotate

我在我的应用程序中有一些意见,我不想支持方向。 在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不会调用。
我在这里错过了什么?

这是因为UITabBarcontrollerUINavigationController都不UITabBarcontroller UINavigationController传递给它的可见视图控制器。 为了解决这个问题,你可以inheritanceUITabBarController或者UINavigationController,并从那里转发shouldAutorotate:

在你的子类UITabBarController中添加:

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

在你的子类UINavigationController中添加:

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

AppDelegate

 - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window // iOS 6 { return UIInterfaceOrientationMaskAll; } 

在你的ViewController中:

 - (BOOL)shouldAutorotate { return YES; } - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; }