0

J'ai trois viewControllers dans un UINavigationController. Dans le second j'ai besoin de cacher la barre de navigation mais pas le bouton de retour et d'autres boutons de la barre. Pour cette raison, je ne peux pas utiliser isNavigationBarHidden = true
Actuellement je traitais ci-dessus comme suit:UINavigationController masquer uniquement navigationBar - Retour animation numéro

Première viewController:

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     self.navigationController?.navigationBar.barTintColor = Constants.kThemeRedColor 
     self.navigationController?.navigationBar.tintColor = UIColor.white 
     self.navigationController?.navigationBar.barStyle = .black 
     self.navigationController?.navigationBar.isTranslucent = false 
    } 

Second viewController (bar cacher seulement nav):

override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
     self.navigationController?.navigationBar.shadowImage = UIImage() 
     self.navigationController?.navigationBar.isTranslucent = true 
     self.navigationController?.view.backgroundColor = UIColor.clear 
    } 

Le problème ici est que lorsque je navigue depuis et vers le firstViewController, pendant une très courte durée lorsque le 1er viewController disparaît et apparaît respectivement, je vois une barre de navigation noire dessus. Je sais que c'est à cause du code écrit dans 2nd viewController. Mais je n'ai pas d'autre solution proche de le faire. Fixation d'une capture d'écran:

Première viewController (comment il devrait être):

enter image description here

Deuxième viewController:

enter image description here

Première viewController (avec barre de navigation noire pour une courte durée):

enter image description here

+0

Quelle est la couleur de votre vue? est tableview ci-dessous navbar? –

Répondre

1

En First viewController, définissez également la backgroundImage et shadowImage de navigationBar comme nil, à savoir

class FirstVC: UIViewController 
{ 
    override func viewWillAppear(_ animated: Bool) 
    { 
     super.viewWillAppear(animated) 
     self.navigationController?.navigationBar.isTranslucent = true 
     self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default) 
     self.navigationController?.navigationBar.shadowImage = nil 
     self.navigationController?.navigationBar.barTintColor = .red 
     self.navigationController?.navigationBar.tintColor = UIColor.white 
     self.navigationController?.navigationBar.barStyle = .black 
    } 
} 

class SecondVC: UIViewController 
{ 
    override func viewWillAppear(_ animated: Bool) 
    { 
     super.viewWillAppear(animated) 

     self.navigationController?.navigationBar.isTranslucent = true 
     self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) 
     self.navigationController?.view.backgroundColor = UIColor.clear 
     self.navigationController?.navigationBar.shadowImage = UIImage() 
    } 
} 
+0

Cela fonctionne parfaitement bien. Merci. Je dois également demander que tout en allant de VC1 à VC2, la même chose arrive. Pendant une très courte durée, la barre de navigation de VC1 devient noire lors de la navigation vers VC2. Comment puis-je résoudre ce problème? – Nitish

+0

Ça marche aussi. Solution: Dans VC2, définissez: self.navigationController? .view.backgroundColor = Constants.kThemeRedColor – Nitish

0

Vous devez cacher la barre de navigation de Navigation Controller et utiliser la navigation personnalisée en utilisant Bar UIView. Je pense que cela va résoudre votre problème.

0

Première viewController montre avec barre de navigation noire pour courte durée de la transition rapide en raison de la couleur de fond de UIWindow sur lequel navigaion- transitions de barre se produisent. Simplement, ajoutez cette ligne dans votre didFinishLaunchingWithOptions: méthode de AppDelegate

window?.backgroundColor = Constants.kThemeRedColor 

Et vous avez terminé. Codage heureux!