我在导航项上使用UISearchController(导航栏已设置为使用barTintColor和tintColor)。关闭搜索控制器后(点击搜索栏的“取消”按钮),后退按钮的tintColor将恢复为默认值(蓝色)。
截屏2:当UISearchController处于活动状态时:
截屏3:当UISearchController被关闭(通过点击“取消”)时,您会看到“后退”按钮的tintColor被恢复为默认值(蓝色),而不是白色:
屏幕截图上的代码为:
/// 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
}
}
}