2017-08-26 3 views
0

J'ai supprimé la ligne de fond UINavigationBar d'un UIViewController qui a été poussée;La ligne UINavigationBar n'apparaît pas sur le parent UIViewController après avoir été supprimé sur le UIViewController poussé

Tout fonctionne correctement jusqu'à ce que je tape sur le bouton de retour, pour voir que le parent UIViewController (celui qui a poussé) n'a pas la ligne de fond aussi bien.

Le problème ici est que je veux seulement que la ligne inférieure soit retirée d'un UIViewController spécifique et pas de toute la pile de vue.

Voilà comment j'enlever la ligne:

self.navigationController?.navigationBar.shadowImage = UIImage() 
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 

Tout soupçon?

Merci.

+0

Je pense que vous devez annuler la modification de la barre de navigation lorsque vous revenez au contrôleur parent view dans la méthode 'viewWillAppear'. – Amit

+0

La chose est, comment puis-je connaître l'image de fond par défaut? Ou comment accéder aux propriétés par défaut? –

Répondre

1

Dans la méthode viewWillAppear de Parent View Controller ajouter:

self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default) 

ou viewWillDisappear méthode du contrôleur de vue dans lequel vous modifiez l'image ajouter la même ligne ci-dessus.

0

Vous pouvez sous-classe UINavigationController et changer les images dans le willShowViewController (ou didShowViewController) méthode déléguée comme ceci:

class NavigationController: UINavigationController, UINavigationControllerDelegate { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     delegate = self 
    } 

    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { 
     if viewControllers.count > 1 { 
      navigationBar.shadowImage = UIImage() 
      navigationBar.setBackgroundImage(UIImage(), for: .default) 
     } else { 
      navigationBar.shadowImage = nil 
      navigationBar.setBackgroundImage(nil, for: .default) 
     } 
    } 

} 

Selon la façon dont vous instanciez votre contrôleur de navigation, vous devez remplacer une autre Initialiseur als bien.