Hai un paio di modi diversi cattivi per farlo. Il fatto che tu sia incorporato in un controller UITAbBar in realtà complica notevolmente questo perché non c'è modo di distinguere se viewDidAppear: viene chiamato a causa del controller che viene spinto o dallo scambio delle tabulazioni, il che significa che potrebbe essere necessario nascondere i dati da qualche parte per sapere cosa sta causando la transizione e se hai bisogno di nascondere la barra o meno.
Supponendo che lo gestisci, un'opzione è di cambiare navigazioneBarHidden dopo l'animazione. Per uscire non c'è un buon posto in cui gestirlo, dal momento che vuoi che l'animazione pop avvenga dopo l'animazione della barra. La soluzione più rapida è quella di nascondere la barra, quindi eseguire manualmente il runloop per ~ 0,5 secondi finché non si anima e poi continua. È grave ma è veloce e funziona.
- (void)viewWillDisappear:(BOOL)animated {
if (animated) {
[self.navigationController.navigationBar setHidden:YES animated:YES];
}
//GROSS
NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:0.5];
while([[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:endDate]);
}
Se si vuole fare in modo pulito, vi consiglio reimplementare UINavigationController da zero.
fonte
2009-08-19 10:14:01
La risposta non è esattamente quello che cercavo, ma abbastanza equo. – tcurdt