Set UINavigationBar appearance whenContainedInInstancesOf to my viewcontroller not working

Oniikal3 picture Oniikal3 · Feb 22, 2017 · Viewed 8k times · Source

I want to set white barTintColor in some viewcontroller I have set UINavigationBar.appearance().barTintColor for all default color but when I use appearance whenContainedInInstancesOf It's not change my viewcontroller

UINavigationBar.appearance(whenContainedInInstancesOf: [MyViewController.self]).barTintColor = .white

Any idea?. I tried this in my viewcontroller

self.navigationcontroller.navigationbar.barTintColor = .white

but I have to set color back to default when screen will disappear. I don't want to do like that. How can I do?

Answer

ArtSabintsev picture ArtSabintsev · Jun 26, 2017

@zombie has the correct answer. I just came across this issue a moment ago with UISearchBar. Here's the Swift 3 version of the answer. Using .red as the sample UIColor for this example.

 let textField = UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
 textField.tintColor = .red

 let searchBar = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
 searchBar.setTitleTextAttributes([NSForegroundColorAttributeName: .red], for: .normal)
 searchBar.setTitleTextAttributes([NSForegroundColorAttributeName: .red], for: .disabled)

Sample Image