Как изменить цвет заголовка навигации

Я думаю, что весь день можно изменить цвет заголовка панели навигации, но он не работает. это мой код:

var user: User? {
    didSet {
        navigationItem.title = user?.name

         observeMessages()
    }
}

Я использую hasSet, чтобы показать название в заголовке навигации.

Ответ 1

Добавьте это в свой код. ,

let textAttributes = [NSForegroundColorAttributeName:UIColor.red]
navigationController?.navigationBar.titleTextAttributes = textAttributes

SWIFT 4:

let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.red]
navigationController?.navigationBar.titleTextAttributes = textAttributes

SWIFT 4. 2+:

let textAttributes = [NSAttributedString.Key.foregroundColor:UIColor.red]
navigationController?.navigationBar.titleTextAttributes = textAttributes

Сохраняя все остальные атрибуты заголовка: Если вы просто хотите изменить цвет, вы можете сделать это так:

if var textAttributes = navigationController?.navigationBar.titleTextAttributes {
    textAttributes[NSAttributedString.Key.foregroundColor] = UIColor.red
    navigationController?.navigationBar.titleTextAttributes = textAttributes
}

Ответ 2

Цвет заголовка панели навигации можно изменить в раскадровке.

Перейдите в Инспектор атрибутов навигационного контроллерa > Панель навигации и установите желаемый цвет в меню Цвет заголовка.


enter image description here

Ответ 3

установить это первым

navigationController?.navigationBar.barStyle = .default

тогда один из них должен работать

navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.red]

или же

navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.red]

Ответ 4

Вызывается didSet, если ваш пользователь настроен, возможно, вы задаете переменную имени пользователя и ожидаете, что программа войдет в didSet. попробуйте установить пользователя.

И если вы хотите изменить цвет текста при изменении названия навигации на имя пользователя, просто вызовите этот код.

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.red]

var user: User? {
    didSet {
        navigationItem.title = user?.name
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    let newUser = User()
    newUser.name = "John Doe"
    user = newUser
}

Ответ 5

Если вы установили заголовок панели навигации так, чтобы он предпочитал большие заголовки, например, так:

navigationBar.prefersLargeTitles = true

тогда вам нужно использовать свойство largeTitleTextAttributes, а не свойство titleTextAttributes. Если вы установили заголовок навигации в качестве большого заголовка, titleTextAttribute не является правильным свойством для использования. Используйте свойство largeTitleTextAttributes, например, так:

navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white]

Ответ 6

В iOS 13 для настройки внешнего вида панели навигации вам необходимо использовать UINavigationBarAppearance:

let appearance = UINavigationBarAppearance()
appearance.titleTextAttributes = [.foregroundColor: UIColor.red]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.red]

navigationItem.standardAppearance = appearance
navigationItem.scrollEdgeAppearance = appearance

Ответ 7

Swift 5/Xcode 11

Напишите этот код как расширение от UINavigationBar

extension UINavigationBar {
    func customNavigationBar() {
        // color for button images, indicators and etc. 
        self.tintColor = UIColor.Custom.mainAppColor

        // color for background of navigation bar
        // but if you use larget titles, then in viewDidLoad must write
        // navigationController?.view.backgroundColor = // your color
        self.barTintColor = .white
        self.isTranslucent = false

        // for larget titles 
        self.prefersLargeTitles = true

        // color for large title label
        self.largeTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.someColor]

        // color for standard title label 
        self.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.someColor]

        // remove bottom line/shadow
        self.setBackgroundImage(UIImage(), for: .default)
        self.shadowImage = UIImage()
    }
}

затем в AppDelegate.swift вызовите UINavigationBar.appearance().customNavigationBar() в функции didFinishLaunchingWithOptions