Установить 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)

Это сработало для меня!

Другие вопросы по тегам