Установить UINavigationBar внешний вид когда ContainedInInstancesOf для моего viewcontroller не работает
Я хочу установить белый barTintColor в некотором контроллере представления, который я установил UINavigationBar.appearance().barTintColor
для всех цветов по умолчанию, но когда я использую внешний вид whenContainedInInstancesOf Это не меняет мой viewcontroller
UINavigationBar.appearance(whenContainedInInstancesOf: [MyViewController.self]).barTintColor = .white
Любая идея?. Я попробовал это в моем viewcontroller
self.navigationcontroller.navigationbar.barTintColor = .white
но я должен вернуть цвет по умолчанию, когда экран исчезнет. Я не хочу так поступать. Как я могу сделать?
3 ответа
UINavigationBar
содержится в UINavigationController
не UIViewController
с этим сказал, что вам нужно создать кастом UINavigationController
пустой класс сделает работу
class NavigationController: UINavigationController {}
тогда мы можем использовать это
UINavigationBar.appearance(whenContainedInInstancesOf: [NavigationController.self]).barTintColor = .white
Пример можно найти здесь
У @zombie правильный ответ. Я только что столкнулся с этой проблемой минуту назад с UISearchBar. Вот версия Swift 3 ответа. С помощью .red
как образец UIColor
для этого примера.
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)
Свифт 4:
// For the cursor color
let textField = UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self])
textField.tintColor = .lightBlue
// For the cancel button on search bar
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.white], for: .normal)
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.lightText], for: .disabled)
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.black], for: .normal)
Это сработало для меня!