Je comprends que cette question (ou ses variantes) a été posée à plusieurs reprises, mais il est toujours préférable d'aborder ce problème sans entrer dans les hacks kludgy.Affichage d'un paysage UIViewController dans un portrait UITabBarController/UINavigationController
J'ai une application avec la mise en page suivante:
UITabBarController
↳ UINavigationController
↳ PortraitViewController
↳ LandscapeViewController
Le premier PortraitViewController
a son rightBarButtonItem
ensemble à un UIBarButtonItem
, qui appelle landscapeButtonPressed:
. Cette méthode pousse le LandscapeViewController
sur la pile du contrôleur de vue.
Dans LandscapeViewController
, j'ai défini hidesBottomBarWhenPushed
à YES
lors de l'initialisation, car je souhaite uniquement que la barre de navigation soit visible.
Je demande aussi setStatusBarOrientation:UIInterfaceOrientationLandscapeRight
sur [UIApplication sharedApplication]
dans loadView
et viewWillAppear:
, puis le remettre pour UIInterfaceOrientationPortrait
en viewWillDisappear:
.
Dans mon implémentation shouldAutorotateToInterfaceOrientation:
, je renvoie YES uniquement pour UIInterfaceOrientationLandscapeRight
.
Le PortraitViewController
ressemble à ceci:
Portrait View http://img.skitch.com/20091007-18ur7p3iubkrb1if5cak8wdxkb.png
Le LandscapeViewController
ressemble à ceci:
Broken Landscape View http://img.skitch.com/20091007-f3ki1ga5m4ytkyg3wgwektp86e.png
Comme vous pouvez le voir, la vue ne tourne pas correctement. Si j'appelle la méthode privée -[UIDevice setOrientation:]
avant d'appeler le -[UIApplication setStatusBarOrientation:]
, je peux faire tourner la barre de navigation correctement, mais je préfère ne pas appeler les méthodes privées et il ne semble pas y avoir de moyen d'obtenir les limites de ma vue principale pour établir des sous-vues. En utilisant les résultats de la méthode privée dans ce:
Better Landscape View http://img.skitch.com/20091007-8ckbx6gpbiateju9qjgew4x3k2.png
des idées sur la façon de résoudre ce problème?
Mon objectif est d'avoir une vue en orientation paysage, avec des coordonnées CGRect de paysage valides que je peux utiliser comme base pour la présentation des sous-vues.
Comme je l'ai dit dans la question, je suis déjà en train de retourner 'YES' dans le contrôleur de paysage. –
J'étais sûr que vous aviez écrit 'UIInterfaceOrientationLandscapeLeft' au lieu de' UIInterfaceOrientationLandscapeRight' ... Mon erreur. – Marcio