0

Je souhaite que l'un de mes viewControllers dans une pile de contrôleurs de navigation soit en "plein écran": pas de barre de navigation ni de barre d'état. J'ai ce code qui cache et montre la barre de navigation dans une des vues contrôleurs de contrôleur de navigation (je veux qu'il soit poussé en plein écran):Masquage des barres de navigation et d'état pour un seul UIViewController dans une pile UINavigationController

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    self.navigationController?.setNavigationBarHidden(true, animated:animated) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.navigationController?.setNavigationBarHidden(false, animated:animated) 
} 

Dans le même viewController je me cache aussi barre d'état avec ceci:

override var prefersStatusBarHidden: Bool { 
    return true 
} 

il se cache et montrant comme prévu, mais le problème est que je reçois une bande noire sur la transition en poussant ce contrôleur de vue et à l'arrière de celui-ci (voir les images).

Poussez à ce contrôleur: Push to this controller

Et De retour de ce contrôleur (bouton retour):

Back from this controller

Il semble que cela se produit en raison de la fonction prefersStatusBarHidden La suppression de cette résout le problème.

Le code pour afficher/masquer la barre de navigation est tirée de: https://stackoverflow.com/a/2406167/4207465

et basé sur la bibliothèque de développeur Apple: « Affichage et masquage de la barre de navigation - Lorsqu'une barre de navigation est utilisé en conjonction avec un contrôleur de navigation, vous utilisez toujours la méthode setNavigationBarHidden: animated: de UINavigationController pour afficher et masquer la barre de navigation ... "

Vous ne savez pas pourquoi ça se passe, Merci pour l'aide!

+0

Il semble que cela se produit à cause de la prefersStatusBarHidden La suppression de cette résout le problème, enquête pourquoi .. –

Répondre

0

Veuillez essayer de cacher la barre de navigation dans viewDidAppear. Vous êtes maintenant en train de masquer la barre avant de montrer le contrôleur.

func viewDidAppear(_ animated: Bool) { 
    super. viewDidAppear(animated) 
    self.navigationController?.setNavigationBarHidden(true, animated: animated) 
} 
+0

Merci, mais, ce qui rend l'animation encore plus étrange .. –

1

@Boaz Frenkel

Il y a une solution pour fixer la bande noire pendant cache et l'affichage de la barre de navigation avec ou sans barre d'état.

ViewController A: Fullscreen Voir

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

override func viewDidAppear(animated: Bool) { 
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade) 
    super.viewDidAppear(animated) 
} 

ViewController B: Avec NavigationBar et la barre d'état

override func viewWillAppear(animated: Bool) { 

    self.navigationController?.setNavigationBarHidden(false, animated: animated) 
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .None) 
    super.viewWillAppear(animated) 
}