2017-03-06 11 views
4

私は3つのビューコントローラを持っています。最初のビューコントローラー(FirstVC)では、ナビゲーションバーのバーの色は透明で、バー自体は半透明です。何かをクリックすると、ナビゲーションバーが不透明である必要があるSecondVCにプッシュされます。だから私はいくつかの色の値にbarTintColorを設定し、falseにisTranslucentを設定します。 SecondVCからThirdVCにプッシュすると、再びナビゲーションバーが半透明になる必要があります。この問題は、ThirdVCをポップしてSecondVCに戻るときに発生します。ナビゲーションバーは1秒間透明で表示され、必要に応じて不透明になります。遅延の理由を理解できません。ビューコントローラをポップするときのナビゲーションバーの色の変更

SecondVCのviewWillAppear()から以下のメソッドが呼び出されます。私はThirdVCのviewWillDisappear()から同じことを試みましたが、効果はありません。

fileprivate func configureNavigationBar(){ 

     self.navigationController?.navigationBar.setBackgroundImage(nil, for: UIBarMetrics.default) 
     self.navigationController?.navigationBar.shadowImage = nil 
     self.navigationController?.navigationBar.isTranslucent = false 
     self.navigationController?.navigationBar.barTintColor = Style.Movie.primaryBackgroundColor 
     let titleDict: NSDictionary = [NSForegroundColorAttributeName: UIColor.white] 
     self.navigationController?.navigationBar.titleTextAttributes = titleDict as? [String:Any] 
    } 

戻るボタンをタップする代わりにスワイプしても問題ありません。

+0

バックpopingしながら、あなたはアニメーション化されています? – vivek

+0

私はそのようなことは何もしていません。 – StudentX

+0

これを実装しても、そのようなUIはスムーズに見えません。 – kelin

答えて

11

thiredVC

での使用この機能を
override func willMove(toParentViewController parent: UIViewController?) { 
      self.navigationController?.navigationBar.barTintColor = color use in secondVC 
    } 
+2

はい、これはうまくいきました。ちょうど、私はbarTintColorと共にisTranslucentプロパティをfalseに設定しなければなりませんでした。おかげで – StudentX

+0

ああこれは素晴らしいです、ありがとう! – gbhall

+0

あなたは私の日を救った!どうもありがとうございます! – Tommy

1

SecondVCのカスタムナビゲーションバーを作成できます。また、戻るボタンをクリックすると、-popViewControllerメソッドが手動で呼び出されます。

関連する問題