I have some views in my app that I don't want to suport orientation.
In didFinishLaunchingWithOptions
I add navigation:
...
UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:self.viewController];
self.window.rootViewController = nav;
[self.window makeKeyAndVisible];
...
In each ViewController
I have UITabBar
(I don't know if this is important).
In the first view controller I add:
-(BOOL)shouldAutorotate {
return NO;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
supportedInterfaceOrientations
is called at the view loading but shouldAutorotate
doesn't call as I rotate device.
What am I missing here?
It's because neither UITabBarcontroller
nor UINavigationController
is passing shouldAutorotate to its visible view controller. To fix that you may subclass either UITabBarController or UINavigationController and forward shouldAutorotate from there:
In your subclassed UITabBarController add:
- (BOOL)shouldAutorotate
{
return [self.selectedViewController shouldAutorotate];
}
In your subclassed UINavigationController add:
- (BOOL)shouldAutorotate
{
return [self.visibleViewController shouldAutorotate];
}
in the AppDelegate
:
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window // iOS 6
{
return UIInterfaceOrientationMaskAll;
}
in your ViewController:
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}