web-dev-qa-db-fra.com

masquer/afficher la barre d'onglets lorsque Push/Back. rapide

Réponse: utilisez self.tabBarController? .TabBar.hidden au lieu de hidesBottomBarWhenPushed dans chaque contrôleur de vue pour déterminer si le contrôleur de vue doit afficher une barre de tabulation ou non.

override func viewWillAppear(animated: Bool) {
    self.tabBarController?.tabBar.hidden = true/false
} 

Je voudrais

contrôleur de vue 1: la barre de tabulation doit être affichée

contrôleur de vue 2: la barre de tabulation doit être affichée

contrôleur de vue 3: la barre de tabulation ne doit pas être affichée.

contrôleur de vue 4: la barre de tabulation ne doit pas être affichée.

J'ai écrit

// prepareForSegue in view controller 1, 
    let upcoming = segue.destinationViewController as! viewcontroller3
    upcoming.hidesBottomBarWhenPushed = true

// in view controller 3,
    func clickOnButton(button: UIButton) {
        self.hidesBottomBarWhenPushed = false
        self.performSegueWithIdentifier("viewController2", sender: self)
        self.hidesBottomBarWhenPushed = true
    }
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "viewController2" {
            let upcoming = segue.destinationViewController as! viewController2
            upcoming.hidesBottomBarWhenPushed = false
        }
    }
// prepareForSegue in view controller 2
    let upcoming = segue.destinationViewController as! viewController4
    upcoming.hidesBottomBarWhenPushed = true

si 1 -> 3 puis de nouveau à 1, fonctionne.

si 1 -> 3 -> 2 puis retour à 3 et retour à 1, fonctionne.

si 2 -> 4, puis retour à 2, fonctionne.

si 1 -> 3 -> 2 -> 4 puis de nouveau à 2, la barre de tabulation n'est pas affichée. Vous vous demandez pourquoi. Des suggestions ou des explications sur hidesBottomBarWhenPushed car cela me confond beaucoup

 enter image description here

5
Pak Ho Cheung

Comme son nom l'indique, hiddenBottomBarWhenPushed ne masque que la barre inférieure si nécessaire, il ne permet pas d'afficher bottomBar. Vous pouvez le faire pour que cela fonctionne:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.tabBarController?.tabBar.hidden = true/false
} 

ou simplement mettre self.tabBarController?.tabBar.hidden = true/false dans prepareForSegue

Mais je ne vous recommanderais pas de le faire, car il serait étrange que bottomBar apparaisse soudainement, l'utilisateur pensera soudainement qu'il revient à rootViewController alors qu'il ne l'est pas.

Les utilisateurs doivent toujours savoir où ils se trouvent dans votre application et comment se rendre à leur prochaine destination.

20
Nick Allen

Ajoutez cette implémentation dans ViewController que vous souhaitez masquer/afficher la barre d’onglet sur poussée/popped. cela fonctionnera également pour tous les contrôleurs de vue poussés suivants.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if wilmove {
        hidesBottomBarWhenPushed = true
    }
    wilmove = false
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if wilmove {
        hidesBottomBarWhenPushed = false
    }
    wilmove = false
}

var wilmove = false
override func willMove(toParentViewController parent: UIViewController?) {
    super.willMove(toParentViewController: parent)
    wilmove = true
    if !isViewLoaded {
        hidesBottomBarWhenPushed = true
    }
}
3
Shoaib

Ajoutez la propriété hidesBottomBarWhenPushed au contrôleur de vue de destination et définissez-la sur true.

Exemple avec Push VC avec identifiant:

    let storyboard = UIStoryboard(name: STORYBOARD_NAME, bundle: nil)
    let vc = storyboard.instantiateViewController(withIdentifier: VC_IDENTIFIER) as! YourViewController
    vc.hidesBottomBarWhenPushed = true
    navigationController?.pushViewController(vc, animated: true)
0
nja