2016-11-14 71 views
6

Próbuję zmienić kolor paska nawigacyjnego podczas przesuwania kontrolera widoku na stosie nawigacji, używając barTintColor podczas nawigacjiController (_: willShow: animated :).iOS - Przejście koloru paska nawigacji po naciśnięciu przycisku cofania

Oto kod:

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) 
    } 
    } 

Wszystko działa pięknie, gdy wciskam kontroler widoku i kiedy korzystać z powrotem gest machnięcia (kolor jest gładkie przejście w obie strony).

Jednak po naciśnięciu przycisku Wstecz, kolor nie zmienia się w pierwszym, przejście nawigacja odbywa się, a następnie kolor zmienia się bez animacji.

Czy ktoś już napotkał/rozwiązał ten problem? Każda wskazówka byłaby doceniona.

+0

jeśli piszesz kod to będzie dla nas łatwe do ustalenia, dlaczego to się stało –

Odpowiedz

0

miałem dokładnie ten sam problem, więc zastąpił przycisk „wstecz” z niestandardowego lewy przycisk paska, a nazywa się:

navigationController?.popViewController(animated: true) 

edit:

ustawiania leftBarButton było przyczyną utraty gest machnięcia, więc potrzebowałem innego Hack:

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

To niestety traci gest swipeToGoBack kontrolera nawigacji :( –

+0

@OliverAtkinson dodanie delegata interactivePopGestureRecognizer rozwiązuje ten problem, –

+0

Dzięki, a co wdrażania Wygląda na to, że gest delegata wygląda? –