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
}
}
}
I had the same problem. Tried everything to fix it. The result is that this is definitely iOS 13 bug because even system apps like Notes does the same. Let's hope Apple will fix it with next iOS update.
Bellow are screenshots from Notes app.
Before tapping on cancel button in search bar
After tapping cancel
Update. iOS 13.2 is out and this bug seems to be fixed ✅