How do I restrict orientation per view controller in iOS7 in a navigation controller hierarchy

Viewed 5249

My app is a UITabBarController --> UINavigationController --> UITableViewController --> UIViewController.

I want to do 2 things:

  1. Prevent my tableview from rotating, I want it to always stay portrait.

  2. FORCE & Allow my UIViewcontroller to rotate landscapeleft.

What I know:

  1. I understand that the viewcontroller at the top of the hierarchy controls rotation. This would be my UITabBarController? Or rather its only viewcontroller which would be at objectIndex:0?

  2. My project settings allow for Portrait, LL and LR rotations. Im thinking this is the pattern I need to follow in order to solve this is allow ALL at the top level to rotate and then control each vc individually, correct?

This is what I have found so far in SO.

So for my top hierarchy, i set the project settings to allow rotation to Portrait, LL and LR.

and then in my tableviewcontroller which i dont want to rotate:

-(BOOL)shouldAutorotate{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

and finally in my uiviewcontroller which I want to rotate:

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

-(BOOL)shouldAutorotate{
    return YES;
}

However this does not work. I can rotate both in any direction. I also dont know how to force rotation LL when I get to my uivc which is called from a modal segue from my tablevc.

Any help understanding this mess would be greatly appreciated :)

3 Answers
Related