Цвет заголовка UINavigationBar

Почему заголовок навигационной панели не меняет свой цвет на белый, когда я снова на главной UIViewController? Вот простой код (viewWillAppear, viewWillDisappear), но это не работает, название остается зеленым, когда я снова на этом ВК. Основной цвет в приложении тоже зеленый:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.statusBarStyle = .lightContent

    DispatchQueue.main.async {
    self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name: "Gotham-Medium", size: 20)!]
    }        
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = .default

    navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.green, NSAttributedStringKey.font: UIFont(name: "Gotham-Medium", size: 20)!]


}

3 ответа

Решение
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIApplication.shared.statusBarStyle = .lightContent

    DispatchQueue.main.async {
       addTitleLabel()
    }        
}


override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = .default
}

func addTitleLabel(){
   var titleLabel: UILabel = UILabel()
   titleLabel.textColor = .white
   titleLabel.textAlignment = .center
   titleLabel.text = "Home"

  self.navigationItem.titleView = titleLabel
}

Вызовите этот метод из формы viewWillAppear.

Это не сработает так, как вы хотите, из-за того, как панель навигации распределяется между контроллерами представления и как система обновляет ее.

Однако вы можете поместить UILabel в заголовок панели навигации в нужный вам шрифт и цвет. Преимущество этого метода в том, что UILabel применяется только к этому конкретному контроллеру представления, поэтому вам никогда не нужно его сбрасывать.

Таким образом, в viewDidLoad контроллера push (second) view помещают этот код:

let label = UILabel()
label.font = UIFont(name: "Menlo", size: 20)
label.textColor = .white
label.text = self.navigationItem.title
self.navigationItem.titleView = label

(обратите внимание, что вы можете установить текст на что угодно, но self.navigationItem.title делает это простым)

Теперь вы можете удалить код, связанный с панелью навигации, из методов viewWillAppear и viewWillDisappear.

Вы должны добавить цветовой код заголовка навигации в представлении появится предыдущий контроллер представления.

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