web-dev-qa-db-fra.com

La barre de navigation ne montre pas iOS rapide

Je rencontre plusieurs contrôleurs de vue dans mon application. Je veux masquer navigationbar dans mon premier contrôleur de vue. J'utilise donc le code suivant pour masquer la barre de navigation 

navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true);

Maintenant, je veux ajouter une barre de navigation dans un autre viewController mais ma barre de navigation n’est pas visible dans ce viewcontroller. Pourquoi ça se passe? 

Mon storyboard montre la barre de navigation mais une fois que j'essaie d'exécuter mon application, elle est partie.

Si je cache la barre de navigation d'un contrôleur de vue, nous ne pouvons pas utiliser le contrôleur de navigation, est-ce vrai? J'espère que je me trompe. Alors quelles sont les raisons pour lesquelles la barre de navigation n'est pas affichée?

MODIFIER:

De plus, je veux que mon contrôleur de vue soit en mode portrait uniquement. Donc j'ai fait ce qui suit est ce qui cause le problème?

extension UINavigationController{
    public override func shouldAutorotate() -> Bool {
        if (UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeLeft ||
            UIDevice.currentDevice().orientation == UIDeviceOrientation.LandscapeRight ||
            UIDevice.currentDevice().orientation == UIDeviceOrientation.Unknown) {
                return false
        }
        else {
            return true
        }
    }

    public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
        return [UIInterfaceOrientationMask.Portrait ,UIInterfaceOrientationMask.PortraitUpsideDown]
    }


}

Éditer 1:

J'utilise le code suivant pour passer d'un contrôleur de vue et non d'un lien au storyboard. Est-ce que cela cause problème maintenant? 

 let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
        presentViewController(secondViewController, animated: false, completion: nil)

Edit 2:

S'il vous plaît vérifier mes captures d'écran suivantes. Quels sont mes paramètres pour le contrôleur secondview

 enter image description here

 enter image description here

Edit 3:

Voici l'inspecteur des attributs du contrôleur de navigation  enter image description here

13
Amsheer

Le contrôleur de navigation est un contrôleur qui possède une pile de contrôleurs de vue. Donc, si vous avez quelque chose comme ça:

NAV -> A -> (transition) B

Même si vous cachez la barre de navigation, vous devriez quand même être capable de faire la suite. Aussi, ne pouvez-vous pas simplement afficher la barre de navigation dans le second contrôleur de vue (viewBillAppear)? Et dans un premier temps de la même manière, masquez-le dans viewWillAppear.

edit: Solution finale au problème: Utilisez:

 let controller = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
 self.navigationController!.pushViewController(controller) 

au lieu de:

let secondViewController = storyboard.instantiateViewControllerWithIdentifier("HomeVC")
presentViewController(secondViewController, animated: false, completion: nil)

Parce que pushViewController ajoutera secondViewController à sa pile. presentViewController remplaçait votre contrôleur de navigation, c'est pourquoi vous ne pouviez pas voir la barre de navigation.

29
Makalele
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}
10
Anbu.Karthik

dans la méthode viewDidLoad du contrôleur de vue dans laquelle vous ne souhaitez pas afficher la barre de navigation, ajoutez la ligne

navigationController.navigationBarHidden = true

vous vous cachez actuellement dans tous les contrôleurs de vue

Edit: vous présentez le contrôleur de vue à la place, il devrait être

self.navigationController!.pushViewController(controller) 
3
harsha yarabarla

J'ai les mêmes exigences dans mon projet Swift.

c'est comme ça que j'ai géré la barre de navigation

Assurez-vous que votre premier écran est intégré au contrôleur de navigation.

 enter image description here

par exemple, nous avons deux écrans A et B

Dans l'écran A, vous devez masquer la barre de navigation dans viewWillAppear

override func viewWillAppear(animated: Bool)
    {
         super.viewWillAppear(animated)

        //hide navigation for screen A
        self.navigationController?.navigationBarHidden = true
    }

pour activer la navigation dans l'écran Bvous devez ajouter le code ci-dessous dans l'écran A

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!)
    {
        if (segue.identifier == "screen B's segue identifier here")
        {
           //enable navigation for screen B       
            navigationController?.setNavigationBarHidden(navigationController?.navigationBarHidden == false, animated: true)
        }

    }

En utilisant le style ci-dessus, je peux activer ou désactiver la barre de navigation pour un écran spécifique, à tout moment

2
swiftBoy

Si vous devez masquer cette barre de navigation uniquement dans ce contrôleur, le meilleur moyen consiste à l'afficher dans viewWillDisappear() et à le masquer dans viewWillAppear().

1
sunshinejr

faire comme dans viewcontroller basé caché en utilisant Swift 4.0

Pour masquer navigationController dans viewWillAppear 

override func viewWillAppear(animated: Bool) {
     super.viewWillAppear(animated)
    self.navigationController?.isNavigationBarHidden = true
}

Pour afficher navigationController dans viewWillDisappear

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
}
1
Vittal Pai

Il est trop tard pour répondre et il y a d'autres bonnes réponses mais j'aimerais partager ce qui a fonctionné pour moi.

let controller = self.storyboard?.instantiateViewControllerWithIdentifier("HomeVC")
    self.navigationController!.pushViewController(controller!, animated:true)
0
IPL10