2010-04-08 8 views
4

Je travaille sur une application iPad pilotée par UINavigationController (test dans le simulateur). Il n'y a que deux UIViewControllers sur la pile des contrôleurs de navigation. Pour la démonstration, appelons-les SetupController et ContentController. SetupController pousse un ContentController sur la pile avecUINavigationBar ne pas mettre à jour sur «retour» en paysage

[self.navigationController pushViewController:contentController animated:YES]; 

Tout en regardant le contenu, vous pouvez appuyer sur le bouton retour pour revenir au contrôleur de configuration. Si l'application est en mode portrait, les choses fonctionnent correctement. Cependant, lorsque l'application est en mode paysage et que j'appuie sur le bouton de retour, les choses vont mal. La pile du contrôleur de vue est mise à jour correctement (par exemple, je vois la vue de SetupController), mais le UINavigationBar n'est pas mis à jour correctement. Les éléments de la barre UINavigation associés au ContentController sont toujours affichés. Pour voir les éléments UINavigationBar attendus de SetupCotroller, je dois appuyer une seconde fois sur le bouton précédent, à quel point UINavigationBar s'anime à l'état correct. Encore une fois, cela se produit uniquement en mode paysage, le mode portrait fonctionne parfaitement.

En tant que test. Dans le [SetupController viewDidAppear:] méthode que j'ai ajouté la sortie de débogage suivant

if(self.navigationController.navigationBar.topItem != self.navigationItem) { 
    NSLog(@"wrong nav item!"); 
} else { 
    NSLog(@"correct nav item!"); 
} 

Je reçois le message « mauvais » chaque fois que le simulateur est en mode paysage, et jamais quand il est en mode portrait. J'ai essayé de supprimer tous les viewDidAppear: messages des deux ViewControllers et toutes les instances où je modifie leurs éléments de navigation ou la barre de navigation elle-même.

Des pensées? Je suppose que je fais quelque chose de mal ici, mais cela me semble être un bug.

Répondre

6

J'ai rencontré le même problème. Il est bizarre, mais vous devez vous assurer que tous les contrôleurs de vue dans la pile ont les éléments suivants mis en œuvre (même si tout DIFFUSE tourné correctement):

  • (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { retour OUI ; }
+0

Yep. Cela l'a réparé. Merci! – eric

Questions connexes