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
Vous devez vous connecter pour publier un commentaire.
Vous devez mettre en œuvre ces code dans votre personnalisé NavigationController.
parce que quand votre dispositif de rotation, il va vous demander votre application rootController(Personnalisé NavigationController) tout d'abord, si
supportedInterfaceOrientations
n'est pas de mettre en œuvre. puis il demandera la rootController poursupportedInterfaceOrientations
.avez-vous trouvé une solution à la première/deuxième problème de temps? Je vais avoir le même problème
OriginalL'auteur johnMa
cela fonctionne très bien sous iOS 8.
mais dans iOS 9 (Xcode 7) je suis devenu un avertissement:
"Conflit de type de retour dans la mise en œuvre de la "supportedInterfaceOrientations': 'UIInterfaceOrientationMask' (aka 'enum UIInterfaceOrientationMask') vs 'NSUInteger' (aka "unsigned long")"
j'ai changé:
OriginalL'auteur Ar No
Swift version de la réponse choisie:
OriginalL'auteur Hayden Holligan