I want some of my ViewControllers landscape and some portrait so this is what I did:
I enabled landscape mode:
Next I added these lines of code to the view controllers I wanted to be Portrait:
-(NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationPortrait;
}
-(BOOL)shouldAutorotate
{
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationPortrait;
}
However when I rotate them they still go to landscape mode.How can I fix that?
The Apple designed way to do this for UINavigationController
is via UINavigationControllerDelegate
.
Usually I just update this delegate to do the following and delegate it to the top displaying controller in the navigation controller's stack:
#pragma mark - UINavigationControllerDelegate
- (NSUInteger)navigationControllerSupportedInterfaceOrientations:(UINavigationController *)navigationController
{
return [navigationController.topViewController supportedInterfaceOrientations];
}
In my opinion the UINavigationController
should just default to the above behavior but this is the api Apple has provided :)
As for the info plist file I uncheck all of the options and handle it all in code as it has caused issues for me in the past and I got tired of dealing with it.