My app is a UITabBarController --> UINavigationController --> UITableViewController --> UIViewController.
I want to do 2 things:
Prevent my tableview from rotating, I want it to always stay portrait.
FORCE & Allow my UIViewcontroller to rotate landscapeleft.
What I know:
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?
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 :)
Simple but it work very fine. IOS 7.1 and 8
AppDelegate.h
AppDelegate.m
ViewController
viewDidLoad
Ok, here it is. kinda complicated.
Project Settings must allow
P, LL & LR
Storyboard is a
UINavController
with aUITableViewController
with a push bar button segue to aUIViewController
.All scenes in storyboard must have inferred as orientation in simulated metrics. Just saying, cause after a while i had them all with different settings after testing so much.
Must have a Class for
NavController
,TableViewController
and the givenUIVController
. My app started out as Single view, then I dragged in a UITVC and finally embedded the UITVC in a UINVC. Then I connected the UIVC to the UITVC bar button item I dragged in via push segue.Set apps
window.rootvc
to thenavVC
, your top hierarchy vc (don't forget to set that ID in storyboards or it'll crash of course):Tell big boss UINVC everyone can rotate:
Restrict tablevc so it won't rotate:
Allow last UIVC to rotate:
Responce
It should not be confused UIDeviceOrientation and interface orientation here is my solution
Appdelegate.h
AppDelegate.m
}
In each vc add the function
}
viewDidAppear