0

私はUINavigationControllerに3つのviewControllerを持っています。もう1つはナビゲーションバーを隠す必要がありますが、戻るボタンやその他のバーボタンは表示されませんUINavigationController hide hide navigationBar - アニメーションの問題

初の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 
    } 

第二のViewController(のみナビゲーションバーを非表示):

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 
    } 

をこのような理由から、私は次のように現在、私は上記の取り扱いしていますisNavigationBarHidden = true
を使用することはできませんここで問題となるのは、最初のviewControllerが消えて表示されている最短の期間、firstViewControllerをナビゲートすると、その上に黒色のナビゲーションバーが表示されることです。私はこれが2番目のviewControllerで書かれたコードのためであることを知っています。しかし、私はこれを行う他の解決策はありません。

ファーストのViewController(それがどうあるべきか):

enter image description here

第二のViewController:

enter image description here

ファーストのViewController(黒ナビゲーションバーでスクリーンショットを添付短期間):

enter image description here

+0

あなたの背景色は何ですか? navbarの下のtableviewですか? –

答えて

1

、バーの変化が起こっている。単純に、あなたのdidFinishLaunchingWithOptionsにこの行を追加します。AppDelegate

window?.backgroundColor = Constants.kThemeRedColor 

そして、あなたが行われている方法を。ハッピーコーディング!

+0

それは完璧に動作します。ありがとう。私はまた、VC1からVC2に行く間に同じことが起こることを尋ねる必要があります。非常に短い持続時間の間、VC1のナビゲーションバーは黒くなり、VC2にナビゲートします。どうすれば修正できますか? – Nitish

+0

それもうまくいきました。ソリューション: VC2では、次のように設定します。 self.navigationController?.view.backgroundColor = Constants.kThemeRedColor – Nitish

0

あなたはナビゲーションコントローラのナビゲーションバーを非表示にするUIViewを使用してカスタムナビゲーションバーを使用する必要があります。私はそれがあなたの問題を解決すると思います。またすなわち

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

最初のViewControllerが原因UIWindowにnavigaion-の背景色の迅速な遷移に短時間黒ナビゲーションバーで表示され、nilとしてnavigationBarbackgroundImageshadowImageを設定First viewController