2016-11-14 110 views
6

我想在navigationController(_:willShow:animated :)過程中使用barTintColor在導航堆棧上推視圖控制器時更改導航欄的顏色。iOS - 按下按鈕時的導航欄顏色轉換

下面是代碼:

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) { 
    if viewController is ViewerViewController { 
     navigationBar.barTintColor = UIColor(custom: .white) 
     navigationBar.tintColor = UIColor(custom: .black) 
    } else if viewController is FeedViewController { 
     navigationBar.barTintColor = UIColor(custom: .blue) 
     navigationBar.tintColor = UIColor(custom: .white) 
    } 
    } 

一切精美的作品,當我推視圖控制器,當我使用刷卡回退姿勢(色彩過渡平滑以兩種方式)。

然而,當我按下後退按鈕,顏色起初不改變,導航過渡完成,然後顏色與沒有動畫改變。

有沒有人遇到/解決過這個問題?任何線索將不勝感激。

+0

,如果你寫的代碼,然後它會很容易爲我們確定它爲什麼會發生這種 –

回答

0

我有完全相同的問題,所以替換爲定製離開欄按鈕「後退」按鈕,並呼籲:

navigationController?.popViewController(animated: true) 

編輯:

設置leftBarButton是造成的損失輕掃手勢,所以我需要另一個黑客:

navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "back"), style: .plain, target: self, action: #selector(pop)) 
navigationController?.interactivePopGestureRecognizer?.delegate = self 
+0

不幸失去了導航控制器的swipeToGoBack手勢:( –

+0

@OliverAtkinson加入interactivePopGestureRecognizer代表解決了這個問題 –

+0

謝謝,什麼是執行看起來像那個代表手勢看起來像? –