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
不会调用。
我在这里错过了什么?
这是因为UITabBarcontroller
和UINavigationController
都不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; }