supportedInterfaceOrientations not working

Abdullah Shafique picture Abdullah Shafique · Feb 14, 2014 · Viewed 20.5k times · Source

I want some of my ViewControllers landscape and some portrait so this is what I did:

I enabled landscape mode:

enter image description here

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?

Answer

Matt picture Matt · Dec 23, 2014

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.