Как изменить шрифт и цвет текста заголовка UINavigationBar

Я хочу изменить шрифт заголовка на Avenir, и я хочу сделать его белым. Вот мой код в методе viewDidLoad:

UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir", size: 20)!]
    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.whiteColor()]

Этот код изменяет только цвет названия, а не шрифта. Кроме того, я попытался реализовать это в файле делегирования приложений, но это не сработало.

Вот как выглядит мой UINavigationBar: введите описание изображения здесь

Я хочу, чтобы название имело шрифт Avenir. Как достичь этого?

Ответ 1

Я использую это:

Обновление, похоже, это тоже необходимо:

    self.navigationController?.navigationBar.barStyle       = UIBarStyle.Black // I then set the color using:

    self.navigationController?.navigationBar.barTintColor   = UIColor(red: 204/255, green: 47/255, blue: 40/255, alpha: 1.0) // a lovely red

    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() // for titles, buttons, etc.

    let navigationTitleFont = UIFont(name: "Avenir", size: 20)!

    self.navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: navigationTitleFont]

Ответ 2

Если вы хотите, чтобы стили были применены через все приложение, добавьте эти строки в файл AppDelegate.m.

NSShadow* shadow = [NSShadow new]; 
shadow.shadowOffset = CGSizeMake(0.0f, 0.0f); 
shadow.shadowColor = [UIColor blackColor]; 

[[UINavigationBar appearance] setTitleTextAttributes: @{
NSForegroundColorAttributeName: [UIColor whiteColor],
NSFontAttributeName: [UIFont fontWithName:@"Kelvetica Nobis" size:20.0f],
NSShadowAttributeName: shadow 
}];

NSForegroundColorAttributeName устанавливает цвет шрифта.

NSFontAttributeName устанавливает шрифт персонализированного шрифта в текст заголовка.

NSShadowAttributeName применяет хороший теневой эффект к тексту, вы можете удалить эту часть, если хотите.

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

[[UIBarButtonItem appearance]
     setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000, -1000)
     forBarMetrics:UIBarMetricsDefault];

Надеюсь, это поможет вашему вопросу:)

Ответ 3

Ваш код в порядке, вам просто нужно установить все titleTextAttributes в одну строку:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white , NSFontAttributeName: UIFont(name: "Avenir", size: 17)!]

Ответ 4

Я бы просто создал выход и сделал это:

@IBOutlet weak var navigationBar: UINavigationBar!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "Avenir", size: 30)!]
}