Masquer la barre d'onglets dans l'application IOS Swift

91

J'essaie de comprendre comment masquer la barre d'onglets dans mon application iOS Swift. Je me fiche des animations fantaisistes ou de quoi que ce soit. Juste quelque chose que je peux mettre dans la fonction ViewDidLoad ().

Robert
la source
Réglez ceci avant de pousser le VC. vc.hidesBottomBarWhenPushed = truedevrait faire le travail. NE PAS afficher ni masquer manuellement la barre d'onglets.
abhimuralidharan

Réponses:

214

Vous pouvez simplement l'utiliser dans votre ViewDidLoad()méthode.

self.tabBarController?.tabBar.hidden = true

Pour Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Ou vous pouvez changer la position z de la barre d'onglets de cette façon:

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

et si vous voulez le montrer à nouveau, alors:

self.tabBarController?.tabBar.layer.zPosition = 0
Dharmesh Kheni
la source
14
Dharmesh, merci pour la réponse. Cela masque avec succès la barre d'onglets, mais la vue tableau ne remplit pas l'écran. C'est juste noir là où la barre d'onglets devrait être. Je suppose qu'il y a une autre étape pour l'adapter à l'écran?
Robert
3
Ajoutez des contraintes pour cela.
Dharmesh Kheni
2
Quelles sont les «contraintes» à ajouter?
db0
Si vous avez utilisé des contraintes, vous pouvez modifier la contrainte de hauteur pour cela ou vous pouvez modifier le cadre de tableView. @ db0
Dharmesh Kheni
5
Mais la barre d'onglets prendrait toujours le contact, essayez de toucher près de n'importe quel onglet de la barre d'onglets invisible. @DharmeshKheni
Shobhit C
140

La réponse acceptée fonctionne, mais la transition vers une autre vue a une animation saccadée (L'animation de la barre d'onglets)

Je voulais également ajouter bien que la solution de Kalpesh fonctionnait parfaitement pour moi, j'ai découvert que chaque contrôleur de vue avait un attribut pour hidesBottomBarWhenPushed (consultez le storyboard.) Si vous souhaitez masquer la barre d'onglets, vous devez cocher cela. Et cela fonctionnerait très bien.

entrez la description de l'image ici

Mise à jour: je ne sais pas si c'est une chose connue, mais voici ce que dit la page de documentation Apple:

Un contrôleur de vue ajouté en tant qu'enfant d'un contrôleur de navigation peut afficher une barre d'outils facultative en bas de l'écran. La valeur de cette propriété sur le contrôleur de vue supérieur détermine si la barre d'outils est visible. Si la valeur de cette propriété est true, la barre d'outils est masquée. Si la valeur de cette propriété est false, la barre est visible.

Je pense que cela signifie que vous devez définir la valeur de base de hidesBottomBarWhenPushed au contrôleur de vue le plus haut (le premier de la pile de navigation.) Une fois que vous avez défini cela sur true, vous pouvez passer à false ou true pour les autres viewcontrollers sur le empiler. Mais, si la valeur hidesBottomBarWhenPushed de votre contrôleur de vue supérieur est false, il n'affichera pas de barre d'onglets pour les autres contrôleurs de la pile de navigation.

Akshansh Thakur
la source
2
c'est ce que nous devons faire. Beaucoup mieux que d'autres réponses si vous voulez juste le cacher pendant que vous présentez le ViewController
Gabriel Goncalves
pourquoi cela ne fonctionne pas dans Swift 4 ?? Je coche déjà l'option, mais elle apparaît toujours lorsque je vais à ce contrôleur de vue particulier
ken
Cela masque également la barre d'onglets pour tous les contrôleurs de vue qui sont ajoutés à la pile après cela. Existe-t-il un moyen de le ramener pour ces contrôleurs de vue suivants?
Justin Vallely
@JustinVallely S'il vous plaît laissez-moi savoir si la mise à jour fonctionne dans la réponse
Akshansh Thakur
1
Merci, la réponse acceptée a posé un problème pour moi, quand je reviens à la vue d'où je venais, la barre d'onglets pour cela était également disparue!
Abed Naseri
79

Avant le push set controller.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
Kalpesh jetani
la source
Ne fonctionne pas lors de l'ajout d'un groupe de contrôleurs avecsetViewControllers
KR
27

Pas besoin de définir la propriété isHidden de tabBar.

Accédez simplement à ViewController (dans StoryBoard) -> Inspecteur d'attributs -> Dans la section «Afficher le contrôleur», cochez la case «Masquer la barre inférieure sur Push». Cela fonctionne comme un charme.

Si vous optez pour 'isHidden', vous devez faire beaucoup de manipulation, c'est-à-dire pour le faire réapparaître lorsque vous revenez en arrière et aussi pour supprimer l'espace vide du bas après avoir masqué tabBar.

Tejas
la source
3
Cela devrait être la vraie réponse. Cela m'a permis de définir les contraintes de mes éléments d'interface utilisateur sans aucun problème.
Karthik Kannan
2
Hide Bottom Bar on Pusha une animation désagréable, imo.
Teodor Ciuraru
Lorsque vous revenez de cette page, Tabbar se fige un peu et revient. Quelle en est selon vous la raison?
Yunus T.
3

Swift 3.

self.tabBarController?.tabBar.isHidden = true
Ronny Kibet
la source
3

Vous pouvez également le définir en extension (utilisez la réponse 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
    }
}
Yair Hadad
la source
2

C'est la méthode par programmation pour Swift 4.0, 4.1, 4.2, 5.0 et versions ultérieures >:

tabBarController?.hidesBottomBarWhenPushed = true

ou

hidesBottomBarWhenPushed = true
J. Doe
la source
@NicoS. Vrai. Où dans la question / réponse lisez-vous quelque chose sur une barre d'outils?
J. Doe
Depuis la documentation: Une valeur booléenne indiquant si la barre d'outils en bas de l'écran est masquée lorsque le contrôleur de vue est poussé sur un contrôleur de navigation.
Nico S.
1
La question concerne la TabBar et non la ToolBar
Nico S.
@NicoS. c'est pareil dans cette situation ... lol. De toute évidence, vous n'avez même pas pris la peine de l'essayer.
J. Doe
1
le premier ne fonctionne pas, le second doit être ajouté lors de l'exécution d'un segue ou avant d'appuyer sur le contrôleur de vue.
Gal Shahar
1

Pour masquer la navigationBar et la tabBar, j'utilise la fonction suivante:

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

    }

}

Lorsque l'orientation de l'écran a changé la hauteur de tabBar change également, j'utilise donc la fonction suivante pour quitter le plein écran pour redimensionner la hauteur:

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
    }
}

J'espère que cela vous sera utile.

Alberto
la source