I'm using an UISearchController on a navigation item (the navigation bar has been setup to use barTintColor and tintColor). When the search controller is dismissed (tapping the Cancel button of the search bar), the back button's tintColor is reversed back to default (blue).
Screenshot 1: The tintColor for the navigation bar is .white
Screenshot 2: When the UISearchController is active:
Screenshot 3: When the UISearchController is dismissed (by tapping Cancel) - you could see the tintColor for the Back button is reversed back to default (blue), not white:
The code on the screenshots is:
/// View controller is embedded in a UINavigationController, the root view controller of the startup storyboard.
class ViewController: UIViewController {
lazy var searchController: UISearchController = {
let controller = UISearchController(searchResultsController: nil)
controller.searchBar.tintColor = .white
return controller
}()
override func viewDidLoad() {
super.viewDidLoad()
if let navigationBar = navigationController?.navigationBar {
setupNavigationBar(navigationBar)
}
if #available(iOS 11.0, *) {
navigationItem.searchController = searchController
} else {
navigationItem.titleView = searchController.searchBar
}
}
func setupNavigationBar(
_ navigationBar: UINavigationBar,
barTintColor: UIColor = .red,
tintColor: UIColor = .white,
textColor: UIColor = .white,
prefersLargeTitles: Bool = true,
isTranslucent: Bool = false) {
navigationBar.isTranslucent = isTranslucent
navigationBar.barTintColor = barTintColor
if #available(iOS 11.0, *) {
} else {
navigationBar.setBackgroundImage(UIImage(), for: .default)
}
navigationBar.shadowImage = UIImage()
navigationBar.tintColor = tintColor
navigationBar.titleTextAttributes = [
.font: UIFont.preferredFont(forTextStyle: .headline),
.foregroundColor: textColor
]
if #available(iOS 11.0, *) {
navigationBar.prefersLargeTitles = prefersLargeTitles
navigationBar.largeTitleTextAttributes = [
.font: UIFont.preferredFont(forTextStyle: .largeTitle),
.foregroundColor: textColor
]
}
if #available(iOS 13.0, *) {
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithOpaqueBackground()
navBarAppearance.titleTextAttributes = navigationBar.titleTextAttributes ?? [:]
navBarAppearance.largeTitleTextAttributes = navigationBar.largeTitleTextAttributes ?? [:]
navBarAppearance.backgroundColor = barTintColor
navBarAppearance.shadowColor = barTintColor
navigationBar.standardAppearance = navBarAppearance
navigationBar.scrollEdgeAppearance = navBarAppearance
}
}
}