11

Ho un'applicazione per iPhone che attualmente sto convertendo in un universal binary per funzionare con l'iPad. Ho implementato con successo tutto ciò di cui ho bisogno in termini di layout, in modo che ora sia supportata la funzionalità full landscape nella mia app (in precedenza ho utilizzato principalmente la modalità portrait per visualizzare il contenuto).Problemi dello stack di navigazione UINavigationController in modalità orizzontale

Ma, ho uno strano problema, e si verifica SOLO in modalità orizzontale: quando spingo un controller di visualizzazione nello stack, sono necessari due tocchi sul pulsante back per tornare al controller di visualizzazione precedente! Il primo tocco mostra una vista vuota, ma con lo stesso nome sul pulsante di navigazione indietro sul lato sinistro, il secondo tocco riporta il controller alla vista precedente come dovrebbe.

Non ho un iPad da testare, quindi mi affido al simulatore. Il problema non viene visualizzato sull'iPhone e non viene visualizzato se si ritorna alla modalità verticale.

La mia app è costituito da una tabbarcontroller con i controller di navigazione caricato per la sua vc di:

//application delegate 
- (void)applicationDidFinishLaunching:(UIApplication *)application 
//.... 
WebHelpViewController *vc8 = [[WebHelpViewController alloc] init]; 
UINavigationController *nv8 = [[UINavigationController alloc] initWithRootViewController:vc8]; 

[self.tabBarController setViewControllers:[NSArray arrayWithObjects:nv1,nv2,nv3,nv4,nv5,nv6,nv7,nv8,nil]]; 

attuare la capacità di paesaggio, l'UITabBarController è sottoposto a override per AutoRotate quando richiesto:

//CustomTabBarController.m 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return [[(UINavigationController *)self.selectedViewController topViewController] shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 

... opere bene. Navigare in nuove viste utilizzando questo metodo

SomeViewController *vc = [[SomeViewController alloc] init]; 
[self.navigationController pushViewController:vc animated:YES]; 
[vc release]; 

È solo un errore di simulazione? Come posso risolvere questo problema?

risposta

10

Suona come un altro ViewController sta rispondendo a:

(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

Controllare questa prima.

+1

Grazie amico, questo era il problema. Avevo bisogno di assicurarmi che tutti i miei ViewControllers implementati - (BOOL) dovessero AutonotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation; –

+0

Se si utilizza 'CMD + N' per creare nuovi' UIViewControllers' in XCode, questo metodo è uno dei valori predefiniti inclusi come parte del modello. – Sneakyness

+0

grrr Sto affrontando esattamente lo stesso tipo di problema: sto presentando un controller di navigazione come modale e poi spingo alcuni ViewControllers. Il controller nav e tutti i controller pushed restituiscono SI a shouldAutorotateToInterfaceOrientation ma in orizzontale, devo premere "back" due volte per ottenere la barra di navigazione correttamente aggiornata:/qualche idea? – yonel