Search code examples
ios6uitabbarcontrolleruiinterfaceorientation

iOS 6 Tab Bar App: shouldAutorotate not working


I momently developing a application with a tab bar and some navigation view controllers in Storyboard using iOS 6 and Xcode 4.5

Usually the app should support all interface orientations but I have two views that only should support portrait mode.

So I added the following code to the view controllers:

-(BOOL)shouldAutorotate
{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

On a other app I developed without storyboard and navigation view controller on iOS 6 it works but her NOT! :/

I hope someone can help, because I found some other post that where not helpful...

With best regards from Germany

Laurenz

EDIT:

I also tried - Doesn't work! :

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;

} 

Solution

  • Excellent answer by Jonathan.

    I modified his code little bit to handle navigation controller in a single snippet.

    - (BOOL)shouldAutorotate {
        if (self.selectedViewController) {
            if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
                return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] shouldAutorotate];
            }
            return [self.selectedViewController shouldAutorotate];
        } else {
            return YES;
        }
    }
    
    - (NSUInteger)supportedInterfaceOrientations {
        if (self.selectedViewController) {
            if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) {
                return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] supportedInterfaceOrientations];
            }
            return [self.selectedViewController supportedInterfaceOrientations];
        } else {
            return UIInterfaceOrientationMaskAllButUpsideDown;
        }
    }