iosobjective-ciphoneuiviewcontrolleruiinterfaceorientation

iOS - Lock a specific UIViewController to a specific orientation


My application supports every 4 orientation, I have a UIViewController which is in LandscapeRight. I am using UINavigationController to push that UIViewController, i want that UIViewController to be only in UIInterfaceOrientationLandscapeRight but when I rotate the phone, it switches back to other Orientation.

-(BOOL)shouldAutorotate{
    return NO;
}

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationLandscapeRight;
}

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeRight;
}

Solution

  • just remove those shouldAutorotate, supportedInterfaceOrientations and preferredInterfaceOrientationForPresentation.

    and add this to the viewcontroller you want to display landscape only.

    -(void)viewDidAppear:(BOOL)animated{
        [super viewDidAppear:animated];
        [[UIDevice currentDevice] setValue:
         [NSNumber numberWithInteger: UIInterfaceOrientationLandscapeLeft]
                                    forKey:@"orientation"];
    } 
    

    actually, this is from a similar question with solution here. How to force view controller orientation in iOS 8?