Nascondi la barra delle schede nell'app IOS Swift


91

Sto cercando di capire come nascondere la barra delle schede nella mia app rapida per iOS. Non mi interessano le animazioni di fantasia o altro. Solo qualcosa che posso inserire nella funzione ViewDidLoad ().


Impostalo prima di spingere il VC. vc.hidesBottomBarWhenPushed = truedovrebbe fare il lavoro. NON mostrare e nascondere manualmente la barra delle schede.
abhimuralidharan

Risposte:


213

Puoi semplicemente usarlo nel tuo ViewDidLoad()metodo.

self.tabBarController?.tabBar.hidden = true

Per Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Oppure puoi cambiare la posizione z della barra delle schede in questo modo:

self.tabBarController?.tabBar.layer.zPosition = -1

e se vuoi mostrarlo di nuovo, allora:

self.tabBarController?.tabBar.layer.zPosition = 0

14
Dharmesh, grazie per la risposta. Ciò nasconde con successo la barra delle schede, ma la visualizzazione tabella non riempie lo schermo. È solo nero dove dovrebbe essere la barra delle schede. Immagino che ci sia un altro passaggio per adattarlo allo schermo?
Robert,

3
Aggiungi vincoli per questo.
Dharmesh Kheni,

2
Quali sono i "vincoli" da aggiungere?
db0

Se hai usato i vincoli, puoi cambiare il vincolo di altezza per quello o puoi cambiare il frame di tableView. @ db0
Dharmesh Kheni,

5
Ma la barra delle schede avrebbe comunque il tocco, prova a toccare vicino a qualsiasi scheda della barra delle schede invisibile. @DharmeshKheni
Shobhit C

140

La risposta accettata funziona, ma la transizione ad un'altra vista ha un'animazione discontinua (l'animazione della barra delle schede)

Volevo anche aggiungere anche se la soluzione di Kalpesh ha funzionato perfettamente per me, ho scoperto che ogni controller di visualizzazione ha un attributo per hidesBottomBarWhenPushed (controlla lo storyboard.) Se desideri nascondere la barra delle schede, dovresti mettere un segno di spunta su quello. E funzionerebbe benissimo.

inserisci qui la descrizione dell'immagine

Aggiornamento: non sono sicuro che questa sia una cosa nota, ma ecco cosa dice la pagina della documentazione di Apple:

Un controller di visualizzazione aggiunto come figlio di un controller di navigazione può visualizzare una barra degli strumenti opzionale nella parte inferiore dello schermo. Il valore di questa proprietà nel controller di visualizzazione più in alto determina se la barra degli strumenti è visibile. Se il valore di questa proprietà è true, la barra degli strumenti è nascosta. Se il valore di questa proprietà è falso, la barra è visibile.

Penso che questo significhi che devi impostare il valore di base di hidesBottomBarWhenPushed nel controller di visualizzazione più in alto (il primo nello stack di navigazione). Una volta impostato su true, puoi cambiare in false o true per gli altri viewcontrollers sul pila. Tuttavia, se il valore hidesBottomBarWhenPushed del controller di visualizzazione più in alto è false, non verrà visualizzata una barra delle schede per gli altri controller nello stack di navigazione.


2
è quello che dovremmo fare. Molto meglio di altre risposte se vuoi solo nasconderlo mentre presenti il ​​ViewController
Gabriel Goncalves

perché non funziona in Swift 4 ?? Ho già selezionato l'opzione, ma appare ancora quando vado a quel particolare controller di visualizzazione
ken

Questo nasconde anche la barra delle schede per tutti i controller di visualizzazione che vengono aggiunti allo stack dopo questo. C'è un modo per ripristinarlo per quei controller di visualizzazione successivi?
Justin Vallely

@JustinVallely Per favore fatemi sapere se l'aggiornamento funziona nella risposta
Akshansh Thakur

1
Grazie, la risposta accettata ha avuto un problema per me, quando torno alla vista da cui provenivo, anche il Tabbar era scomparso!
Abed Naseri

79

Prima del push set controller.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)

Non funziona quando si aggiungono un gruppo di controller consetViewControllers
KR

27

Non è necessario impostare la proprietà isHidden di tabBar.

Semplicemente, vai a ViewController (in StoryBoard) -> Ispettore attributi -> Nella sezione "Visualizza controller" seleziona la casella di controllo "Nascondi barra inferiore su push". Funziona come un fascino.

Se vai nel modo 'isHidden' devi fare molte manipolazioni, cioè farlo apparire di nuovo quando torni indietro e anche rimuovere lo spazio vuoto in basso dopo aver nascosto tabBar.


3
Questa dovrebbe essere la risposta effettiva. Questo mi ha permesso di impostare i vincoli per i miei elementi dell'interfaccia utente senza problemi.
Karthik Kannan

2
Hide Bottom Bar on Pushha un'animazione spiacevole, imo.
Teodor Ciuraru

Quando torni da questa pagina, Tabbar si blocca un po 'e torna indietro. Quale pensi sia il motivo?
Yunus T.


3

Puoi anche impostarlo in estensione (usa la risposta di Dharmesh Kheni)

extension UITabBar {
func tabsVisiblty(_ isVisiblty: Bool = true){
    if isVisiblty {
        self.isHidden = false
        self.layer.zPosition = 0
    } else {
        self.isHidden = true
        self.layer.zPosition = -1
    }
}

2

Questo è il modo programmatico per Swift 4.0, 4.1, 4.2, 5.0 e versioni successive >:

tabBarController?.hidesBottomBarWhenPushed = true

o

hidesBottomBarWhenPushed = true

@NicoS. Vero. In che punto della domanda / risposta leggi qualcosa su una barra degli strumenti?
J. Doe

Dalla documentazione: un valore booleano che indica se la barra degli strumenti nella parte inferiore dello schermo è nascosta quando il controller di visualizzazione viene premuto su un controller di navigazione.
Nico S.

1
La domanda riguarda la TabBar non la ToolBar
Nico S.

@NicoS. è lo stesso in questa situazione ... lol. Chiaramente non ti sei nemmeno preso la briga di provarlo.
J. Doe

1
il primo non funziona, il secondo dovrebbe essere aggiunto quando si esegue un segue o prima di premere il controller della vista.
Gal Shahar,

1

Per nascondere la navigationBar e la tabBar utilizzo la funzione successiva:

var tabBarHeight : CGFloat!

func fullScreenAction(){
    if navigationController?.isNavigationBarHidden ?? false {
        //Show navigationBar
        navigationController?.setNavigationBarHidden(false, animated: false)

        //Show tabBar
        tabBarController?.tabBar.isHidden = false
        //Update the height of tabBar
        if (!(tabBarController?.tabBar.frame.size.height.isEqual(to: 0))!) {
            tabBarHeight = self.tabBarController?.tabBar.frame.size.height
        }
        tabBarController?.tabBar.frame.size.height   = tabBarHeight
    } else {
        //Hide navigationBar
        navigationController?.setNavigationBarHidden(true, animated: false)

        //Hide tabBar
        tabBarController?.tabBar.isHidden = true
        //Update the height of tabBar
        tabBarHeight = tabBarController?.tabBar.frame.size.height
        tabBarController?.tabBar.frame.size.height   = 0

    }

}

Quando l'orientamento dello schermo ha cambiato l'altezza della tabBar cambia anche, quindi uso la funzione successiva per uscire dallo schermo intero per ridimensionare l'altezza:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if navigationController?.isNavigationBarHidden ?? false {
        navigationController?.setNavigationBarHidden(false, animated: false)
        tabBarController?.tabBar.isHidden = false
    }
}

Spero sia utile per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.