IOS изменить шрифт и цвет заголовка панели навигации

Итак, у меня есть этот код, который должен изменить шрифт заголовка навигационной панели, но он doenst

    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont
                                                                       fontWithName:_dataManager.optionsSettings.fontString size:14], NSFontAttributeName,
                            [UIColor whiteColor], NSForegroundColorAttributeName, nil];

[[UINavigationBar appearance] setTitleTextAttributes:attributes];

Изменение шрифта кнопки обратной связи с помощью этого кода очень просто.

   //set backbutton font
NSDictionary *normalAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [UIFont fontWithName:_dataManager.optionsSettings.fontString size:15], NSFontAttributeName,
                                  nil];
[[UIBarButtonItem appearance] setTitleTextAttributes:normalAttributes
                                            forState:UIControlStateNormal];

Ответ 1

Правильный способ изменения шрифта заголовка (и цвета):

[self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[UIColor redColor],
NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21]}];

Изменение: Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedString.Key.foregroundColor: UIColor.red,
 NSAttributedString.Key.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Изменение: Swift 4

self.navigationController?.navigationBar.titleTextAttributes =
[NSAttributedStringKey.foregroundColor: UIColor.red,
 NSAttributedStringKey.font: UIFont(name: "mplus-1c-regular", size: 21)!]

Swift 3:

self.navigationController?.navigationBar.titleTextAttributes = 
[NSForegroundColorAttributeName: UIColor.redColor(),
 NSFontAttributeName: UIFont(name: "mplus-1c-regular", size: 21)!]

Ответ 2

В других ответах нет ничего плохого. Я просто делюсь версией раскадровки для установки шрифта.

1. Выберите панель навигации в вашем контроллере навигации

navbar

2. Измените заголовок шрифта в инспекторе атрибутов

title-font

(Вам, вероятно, придется переключить оттенок панели для панели навигации, прежде чем Xcode подберет новый шрифт)

Примечания (предостережения)

Проверено, что это работает на Xcode 7.1. 1+. (См. Примеры ниже)

  1. Вам нужно переключить оттенок навигационной панели до того, как шрифт вступит в силу (похоже, ошибка в Xcode; вы можете переключить его обратно на значение по умолчанию, и шрифт будет закреплен)
  2. Если вы выбираете системный шрифт ~ Убедитесь, что размер не равен 0.0 (в противном случае новый шрифт будет игнорироваться)

size

  1. Похоже, это работает без проблем, когда только один NavBar находится в иерархии представления. Похоже, что вторичные NavBars в том же стеке игнорируются. (Обратите внимание, что если вы показываете главный навигационный контроллер navBar, все остальные пользовательские настройки navBar игнорируются).

Gotchas (deux)

Некоторые из них повторяются, что означает, что их, скорее всего, стоит отметить.

  1. Иногда раскадровка XML повреждается. Для этого необходимо просмотреть структуру в раскадровке в режиме исходного кода (щелкните правой кнопкой мыши файл раскадровки> Открыть как...)
  2. В некоторых случаях тег navigationItem, связанный с определенным пользователем атрибутом среды выполнения, был задан как дочерний элемент xml тега представления вместо тега контроллера представления. Если это так, удалите его между тегами для правильной работы.
  3. Переключите оттенок NavBar, чтобы убедиться, что используется пользовательский шрифт.
  4. Проверьте параметр размера шрифта, если не используете динамический стиль шрифта
  5. Вид иерархии переопределит настройки. Похоже, что один шрифт на стек возможно.

Результат

navbar-italic

образцы

Обработка пользовательских шрифтов

Примечание ~ Хороший контрольный список можно найти на веб-сайте Code With Chris, и вы можете увидеть пример проекта загрузки.

Если у вас есть собственный шрифт и вы хотите использовать его в своей раскадровке, то на следующий вопрос SO есть приличный набор ответов. Один ответ определяет эти шаги.

  1. Получите свой файл шрифта (.ttf,.ttc)
  2. Импортируйте файлы шрифтов в ваш проект Xcode
  3. В app-info.plist добавьте ключ с именем Fonts, предоставляемый приложением. В качестве типа массива добавьте все имена файлов шрифтов в массив, обратите внимание: включая расширение файла.
  4. В раскадровке на панели навигации перейдите к инспектору атрибутов, нажмите правую кнопку со значком в области "Выбор шрифта". На всплывающей панели выберите "Шрифт для пользовательского" и выберите имя шрифта, в которое встроено семейство.

Пользовательский обход шрифтов

Таким образом, Xcode, естественно, выглядит так, как будто он может обрабатывать пользовательские шрифты в UINavigationItem, но эта функция просто не обновляется должным образом (выбранный шрифт игнорируется).

UINavigationItem

Чтобы обойти это:

Одним из способов является исправление с использованием раскадровки и добавление строки кода: сначала добавьте UIView (UIButton, UILabel или какой-либо другой подкласс UIView) в View Controller (не элемент навигации... Xcode в настоящее время не позволяет этого делать тот). После добавления элемента управления вы можете изменить шрифт в раскадровке и добавить ссылку в качестве выхода на ваш View Controller. Просто назначьте это представление UINavigationItem.titleView. Вы также можете установить текстовое имя в коде, если это необходимо. Сообщается об ошибке (23600285).

@IBOutlet var customFontTitleView: UIButton!

//Sometime later...    
self.navigationItem.titleView = customFontTitleView

Ответ 3

Попробуйте следующее:

NSDictionary *textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                [UIColor whiteColor],NSForegroundColorAttributeName,
                                [UIColor whiteColor],NSBackgroundColorAttributeName,nil];
self.navigationController.navigationBar.titleTextAttributes = textAttributes;

Ответ 4

Мой код Swift для изменения. Заголовок панели навигации:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
self.navigationController.navigationBar.titleTextAttributes = attributes

И если вы хотите изменить фоновый шрифт тоже, то у меня это в AppDelegate:

let attributes = [NSFontAttributeName : UIFont(name: "Roboto-Medium", size: 16)!, NSForegroundColorAttributeName : UIColor.whiteColor()]
UIBarButtonItem.appearance().setTitleTextAttributes(attributes, forState: UIControlState.Normal)

Ответ 5

Вот ответ на ваш вопрос:

Переместите свой код ниже, потому что заголовок панели навигации обновлен после загрузки. Я попытался добавить выше код в viewDidLoad не работает, он отлично работает в методе viewDidAppear.

  -(void)viewDidAppear:(BOOL)animated{}

Ответ 6

Кому нужна версия Swift 3. redColor() изменился на red.

self.navigationController?.navigationBar.titleTextAttributes =
        [NSForegroundColorAttributeName: UIColor.red,
         NSFontAttributeName: UIFont(name: "{your-font-name}", size: 21)!]

Ответ 7

Это немного читаемо, используя литералы:

self.navigationController.navigationBar.titleTextAttributes = @{
                                                              NSFontAttributeName:[UIFont fontWithName:@"mplus-1c-regular" size:21],
                                                              NSForegroundColorAttributeName: [UIColor whiteColor]
                                                              };

Ответ 8

У меня была одна проблема, потому что, когда я пытался программным образом изменить заголовок NavigationItem, я не смог найти свой семейный шрифт (попробовал много вещей, но не смог его запустить правильно), поэтому я нашел одно обходное решение очень красивым и легким в раскадровке.

  • Во-первых, вы добавляете в меню Navigation Item один вид в середине и не забудьте установить backGroundColor, чтобы очистить цвет, чтобы иметь тот же цвет navBar:

введите описание изображения здесь

  1. Затем вы добавляете одну метку, которую вы можете редактировать (установить цвет текста, шрифта, размер...) в этом представлении
  2. Вы добавляете ограничения для метки (Top = 0, Bottom = 0, Trailing = 0 и Leading = 0) для просмотра и центра текста метки

Наконец, вы должны иметь что-то подобное в схеме документа:

введите описание изображения здесь

И что-то вроде этого в вашем ViewController:

введите описание изображения здесь

Надеюсь, это поможет.

Ответ 9

Swift: -

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Love Nature", size: 40)!]

Ответ 10

ДОБАВЛЯЙТЕ этот код с одной строкой в своем делете приложения - закончил Lauch. Он изменит шрифт, цвет панели навигации в приложении.

UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont(name: "YOUR FONT NAME", size: 25.0)!]

Ответ 11

Этот вариант для альтернативы Swift 4 (уже ответ от @Josh):

let titleTextAttributed: [NSAttributedStringKey: Any] = [.foregroundColor: UIColor.red, .font: UIFont(name: "AvenirNext-Regular", size: 20) as Any]
navigationController?.navigationBar.titleTextAttributes = titleTextAttributed

Ответ 12

iOS 11

enter image description here

Objective-C

if (@available(iOS 11.0, *)) {
    self.navigationController.navigationItem.largeTitleDisplayMode =  UINavigationItemLargeTitleDisplayModeAlways;
    self.navigationController.navigationBar.prefersLargeTitles = true;

// Change Color
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};

} else {
    // Fallback on earlier versions
}

Ответ 13

Для Objective-C установить шрифт и цвет

- (void)_setup {
    NSDictionary *barButtonTitleAttributes = @{
                                               NSForegroundColorAttributeName : [UIColor whiteColor],
                                               NSFontAttributeName :[UIFont fontWithName:@"Lato-Regular" size:15.0]
                                               };
    [self.navigationBar setTitleTextAttributes:barButtonTitleAttributes];

}

Ответ 14

Вот ответ для Swift 4 😁:

    let textAttributes:[String:Any]? = [NSAttributedStringKey.foregroundColor.rawValue:UIColor.blue, NSAttributedStringKey.font.rawValue:UIFont(name:"Avenir Next", size:20)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

Ответ 15

Не забудьте добавить Raw значения ключей, чтобы избежать ошибок компиляции.

    let textAttributes:[NSAttributedStringKey: Any] = [NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue):UIColor.blue, NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue):UIFont(name:"OpenSans", size: 17)!]
    navigationController?.navigationBar.titleTextAttributes = textAttributes

Ответ 16

Swift 4.2

self.navigationController?.navigationBar.titleTextAttributes =
        [NSAttributedString.Key.foregroundColor: UIColor.white,
         NSAttributedString.Key.font: UIFont(name: "LemonMilklight", size: 21)!]

Ответ 17

Добавить это расширение

extension UINavigationBar {
    func changeFont() {
        self.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont(name:"Poppins-Medium", size: 17)!]
    }
}

Добавьте следующую строку в viewDidLoad()

self.navigationController?.navigationBar.changeFont()

Ответ 18

Работа в swift 3.0 Для изменения цвета заголовка вам нужно добавить titleTextAttributes, как этот

        let textAttributes = [NSForegroundColorAttributeName:UIColor.white]
        self.navigationController.navigationBar.titleTextAttributes = textAttributes

For changing navigationBar background color you can use this
        self.navigationController.navigationBar.barTintColor = UIColor.white

For changing navigationBar back title and back arrow color you can use this
       self.navigationController.navigationBar.tintColor = UIColor.white