supportedInterfaceOrientations pas appelé avec iOS 7

J'ai cherché une réponse à cette question, mais ne pouvait pas trouver quelque chose qui a résolu mon problème.

Alors, voici le problème:
J'ai un custom UINavigationController, lors de la création de la supportedInterfaceOrientations méthode est appelée sur le rootViewController(ne supporte portrait).
Mais lorsque l'on pousse un autre ViewController sur la pile cette méthode n'est pas appelée sur l'poussé ViewController(prend en charge tous mais à l'envers).

Je l'ai résolu en appelant [self supportedInterfaceOrientations] dans le viewDidLoad-méthode, mais je pense que c'est pas une bonne façon de résoudre le problème.

J'espère que vous pourrez m'aider dans cette affaire.

Voici mon code que j'ai mis en œuvre dans la deuxième viewController.

- (BOOL)shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [[[UIApplication sharedApplication] delegate] setGlobalOrientationMask:UIInterfaceOrientationMaskAllButUpsideDown];
        return UIInterfaceOrientationMaskAllButUpsideDown;
    }
    else {
        [[[UIApplication sharedApplication] delegate] setGlobalOrientationMask:UIInterfaceOrientationMaskAll];
        return UIInterfaceOrientationMaskAll;
    }
}

Je pense que la solution de johnMa devrait fonctionner pour la plupart des applications, mais dans mon cas, il y a un problème je pense, mais je l'ai résolu en moi-même maintenant(pas sûr si c'est une bonne idée, mais ça fonctionne).

J'ai mis en place le - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated méthode sur mon navigationController-délégué.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (DEF_SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7")) {
        if ([viewController respondsToSelector:@selector(supportedInterfaceOrientations)]) {
            [viewController supportedInterfaceOrientations];
        }
    }
}

J'espère que cela peut aider d'autres avec le même problème.

OriginalL'auteur Manuel Wa | 2014-01-13