50 votes

iOS6: supportéInterfaceOrientations ne fonctionne pas (est invoqué mais l'interface tourne toujours)

Dans mon application j'ai plusieurs points de vue, certains points de vue nécessité de soutenir à la fois portrait et paysage, tandis que d'autres vues de la nécessité de soutenir portrait uniquement. Ainsi, dans le résumé du projet, j'ai tout sélectionné toutes les orientations.

Le code ci-dessous travaillé pour désactiver le mode paysage sur une-vue-contrôleur avant iOS 6:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

Depuis shouldAutorotateToInterfaceOrientation a été dépréciée en iOS6 j'ai remplacé le ci-dessus avec:

-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;
}

Cette méthode est correctement appelé lorsque la vue s'affiche (je peux mettre un point d'arrêt pour s'assurer de cela), mais l'interface tourne toujours en mode paysage, indépendamment du fait que je suis de retour le masque pour le mode portrait uniquement. Ce que je fais mal?

Il semble qu'actuellement il est impossible de construire une application qui a une orientation différente des exigences per view. Elle semble être la seule à respecter les orientations précisées dans le projet de résumé.

69voto

Martin Points 3170

Si vous utilisez UINavigationController en tant que contrôleur de fenêtre racine , ce seront ses shouldAutorotate & supportedInterfaceOrientations qui seraient appelés.

Idem si vous utilisez un UITabBarController , etc.

Il faut donc sous-classer votre contrôleur de navigation / tabulation et substituer ses méthodes shouldAutorotate & supportedInterfaceOrientations .

30voto

NSStudent Points 329

essayez de changer ce code dans AppDelegate.m

 //   self.window.rootViewController = self.navigationController;

    [window setRootViewController:navigationController];
 

c'est la réponse complète

shouldAutorotateToInterfaceOrientation n'étant pas appelé dans iOS 6

XD

20voto

Pavel Points 355

Dans mon cas, j'ai UINavigationController et mon contrôleur de vue à l'intérieur. J'ai dû sous-classer UINavigationController et, pour ne prendre en charge que Portrait, ajouter cette méthode:

 - (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}
 

Ainsi, dans la sous-classe UINavigationController, je dois vérifier quelle orientation est prise en charge par le topViewController actuel.

 - (NSUInteger)supportedInterfaceOrientations
{
    return [[self topViewController] supportedInterfaceOrientations];
}
 

15voto

James Jones Points 527

Une chose que j’ai trouvée est que si vous avez une vieille application qui est toujours en cours

 [window addSubView:viewcontroller.view];  //This is bad in so may ways but I see it all the time...
 

Vous devrez mettre à jour cela pour:

 [window setRootViewController:viewcontroller]; //since iOS 4
 

Une fois que vous faites cela, l'orientation devrait recommencer à fonctionner.

14voto

Phil Points 730

Le meilleur moyen pour iOS6, plus précisément, c'est noté dans "iOS6 Par Tutoriels" par le Rayon Wenderlich équipe - http://www.raywenderlich.com/ et c'est mieux que de sous-classement UINavigationController pour la plupart des cas.

Je suis sous iOS6 avec un scénario qui comprend un UINavigationController défini comme le point de vue initial du contrôleur.

//AppDelegate.m - cette méthode n'est pas disponible en pré-iOS6 malheureusement

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
NSUInteger orientations = UIInterfaceOrientationMaskAllButUpsideDown;

if(self.window.rootViewController){
    UIViewController *presentedViewController = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
    orientations = [presentedViewController supportedInterfaceOrientations];
}

return orientations;

}

//MyViewController.m - de retour quel que soit orientations à prendre en charge pour chaque UIViewController

- (NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskPortrait;

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X