2008-11-24 2 views
16

Mon application est assez simple: elle démarre avec un contrôleur de vue qui contient une vue de table (en mode d'affichage groupé) avec quelques options. Lorsque l'utilisateur tape sur l'une des options, je pousse un autre contrôleur de vue sur mon contrôleur de navigation.Comment forcer une orientation d'écran dans des contrôleurs de vue spécifiques?

Ce second contrôleur de visualisation affiche simplement un UIImageView, et l'utilisateur peut changer l'orientation de l'écran sur ce contrôleur de vue entre les modes portrait/paysage. Cela fonctionne très bien, et tout est heureux.

Toutefois, si l'utilisateur appuie sur le bouton «Précédent» de ma barre de navigation en mode paysage, la disposition du premier contrôleur est complètement foirée. Voir ci-dessous avant/après les captures d'écran:

before http://pessoal.org/shot1.jpg after http://pessoal.org/shot2.jpg

Des indices sur la façon de forcer le premier contrôleur de vue (seconde capture d'écran dans ce post) de rester dans l'orientation de l'écran de portrait?

Répondre

2

Il ne semble pas y avoir moyen de le faire en utilisant les méthodes documentées.

J'ai déposé un bug pour cela: rdar: // 6399924

"Il n'y a aucun moyen de limiter toujours UIViewController à une orientation"

Vous pouvez le voir sur le radar ouvert (avec un lien vers un exemple de code pour reproduire le problème) ici: http://openradar.appspot.com/radar?id=697

+2

Cette réponse est de 2008. Maintenant, vous avez la solution [ici] (http://blog.typpz.com/2010/02/12/iphone-programming-how-to-force-your -app-to-run-in-mode-paysage /) j'ai utilisé pour verrouiller l'orientation. –

+0

Comme toujours sur Stack Overflow, si vous avez une solution meilleure/plus à jour que celle acceptée, veuillez la poster de manière appropriée afin que nous puissions mettre à jour la réponse acceptée. – lfalin

-1

Je n'ai pas réussi à obtenir ce que je voulais. Vous devriez être en mesure de définir une orientation particulière pour un ViewController, mais le NavigationController ne semble pas toujours faire la bonne chose.

J'ai commencé à redessiner mes écrans pour qu'ils fonctionnent tous dans les deux sens. Cela pourrait être un travail supplémentaire, mais il "se sent" plus naturel, de toute façon.

0

Comme quelqu'un sur le radar ouvert suggéré, une solution consiste à désactiver le bouton « retour », tandis que dans le non-portrait:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
    // don't let user press "back" button in landscape - otherwise previous view and the rest of the application 
    // will also be in landscape which we did not feel like testing yet 
    self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation); 
} 
0

Il existe une solution pour cela: utiliser un contrôleur de vue et ajouter sa vue à la fenêtre. Ensuite, dans ce contrôleur, vous forcez le paysage dans la méthode shouldAutorotate .... Cela fonctionne bien, mais assurez-vous qu'il est nécessaire que votre projet l'utilise, car il n'est pas très intelligent de forcer l'utilisateur à tourner son iPhone. En passant, voici un exemple de code si vous en avez besoin.

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html