IOS 6 screen rotation without using storyboard

11,872

Solution 1

The solution is that: Since my app is trying to support from 4.3+, I have to use the navigation controller to do every view switch.

by ios6 seems delegates to the navigation controller, I have to define my own navigation controller, and setup conditions and functions to change its rotation behaviour.

When I load a view, I then do([self.navigationCOntroller setEnableLandscape:(BOOL)false]). in that way you have full controller of your navigation controller.

NOTE: I did try override the navigation controller methods, but seems just get ignored. (This only happens to ios 6.0 as well), haven't test 6.1 yet, so not sure if it's get fixed(which please let me know if it does)

Solution 2

Autorotation is changing in iOS 6. In iOS 6, the shouldAutorotateToInterfaceOrientation: method of UIViewController is deprecated. In its place, you should use the supportedInterfaceOrientations and shouldAutorotate methods.

Read more here.

Solution 3

instead of [self.window addSubview:navController.view];

insert self.window.rootViewController = navController;

Share:
11,872
phil88530
Author by

phil88530

Ruby on Rails WordPress iPhone & iPad Apps Android Mobile & Pad Apps

Updated on June 25, 2022

Comments

  • phil88530
    phil88530 almost 2 years

    Anyone who's trying the newest iOS 6 beta(version 2 or 3) has the same experience of auto rotation not working?

    I am not using storyboard but pure navigation control:

    self.navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    [self.window addSubview:navController.view];
    

    And have:

    - (BOOL)shouldAutorotateToInterfaceOrientation: ](UIInterfaceOrientation)interfaceOrientation
    {
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
    }
    
    - (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    

    BUT IOS has no espouse at all, works fine with all previous iOS on 3GS/4S and 4.3,5.0.5.1 simulator, but iOS 6 seems just buggy