2010-06-01 12 views
18

Ho un'applicazione con un controller barra di tabulazione e ogni vista contiene un controller di navigazione. My MainWindow ha il seguente aspetto: alt text http://www.freeimagehosting.net/image.php?7bc867a594.pngCome nascondere la barra di controllo genitore quando si spinge il controller in navigationController

Tutto funziona correttamente, ma ho notato un problema quando si sposta una vista dettagli sul controller di navigazione. Nel didSelectRowAtIndexPath per un tableviewcontroller che appartiene al controller barra delle schede (quella chiamata più recente nell'immagine) sto facendo questo:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
ArticleViewController *articleController = [[ArticleViewController alloc] initWithNibName:@"ArticleView" bundle:nil]; 

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

[articleController release]; 
articleController = nil; 

}

L'ArticleViewController ha una propria barra delle linguette perché ha bisogno di visualizzare cose differenti. Il problema è che quando spingo l'ArticleViewController nel navigationController vedo entrambi i tabbar nella parte inferiore della vista. C'è un modo per risolvere questo problema?

Grazie in anticipo

risposta

61

Dopo aver trascorso ore e la pubblicazione di una domanda qui ho trovato che la soluzione a questo problema è l'aggiunta la seguente riga dopo l'istanza di ArticleController.

articleController.hidesBottomBarWhenPushed = YES; 
+1

Grazie mille! Funziona come un incantesimo! Hai reso la mia giornata! – Tommy

+0

la nota importante è stata impostata 'hidesBottomBarWhenPushed' immediatamente dopo aver creato targetViewController –

7

Una soluzione molto semplice:

destinationViewController.hidesBottomBarWhenPushed = YES; 

Nel tuo caso:

articleController.hidesBottomBarWhenPushed = YES; 

Spero che questo aiuti!

17

Se si preferisce la configurazione della storyboard sulla codifica, è disponibile un interruttore. Basta andare destinationViewController> Attributo Ispettore:

enter image description here

+1

Non sono sicuro del motivo per cui è stato down-votato, ma questo ha funzionato per me. – iSee

0

È possibile aggiungere sotto il codice nel controller della vista, che si sta spingendo.

-(BOOL)hidesBottomBarWhenPushed 
{ 
    return YES; 
} 

In questo modo nascondere la barra delle linguette nel controller della vista spinto solo e, come si pop barra delle linguette View Controller rimane unhide a riposo tutti i controller di vista.

versione Swift (3.xe sopra)

override var hidesBottomBarWhenPushed: Bool { 
    get { 
     return navigationController?.topViewController == self 
    } 
    set { 
     super.hidesBottomBarWhenPushed = newValue 
    } 
} 

Grazie

0

una rapida 3, scrivere lo stesso codice da voi unhide barra delle linguette prima che il codice pushviewController come qui di seguito

var frame = self.tabBarController?.tabBar.frame 
    frame?.origin.y = self.view.frame.size.height - (frame?.size.height)!+112 
    UIView.animate(withDuration: 0.2, animations: { 
     self.tabBarController?.tabBar.frame = frame! 
    }) 
    self.navigationController?.pushViewController(viewController, animated: true) 

o usa solo whant per mostrare la tabbar puoi usare

viewController.hidesBottomBarWhenPushed = false 
0

enter image description here

Vai Interface Builder in Xcode -> attributo aperta ispettore e selezionare la voce 'Hide Barra inferiore Push' per controller della vista non si vuole mostrare barra delle schede. Funzionerà!!

1

Puoi nascondere la tabbar genitore tramite lo storyboard.

Selezionare viewcontroller>Attribute Inspector>controlloNascondi Barra inferiore Push

Problemi correlati