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];
995   15  

15 ответов:

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

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

Edit: 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)!]

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

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

navbar

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

title-font

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

Примечания (Предупреждения)

проверено, что это работает на Xcode 7.1.1+. ( смотрите образцы ниже)

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

size

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

Gotchas (deux)

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

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

результат

navbar-italic

образцы

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

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

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

  1. получить пользовательский файл шрифта(.ТЦФ.,ttc)
  2. импортируйте файлы шрифтов в свой проект Xcode
  3. в приложении-инфо.plist, добавьте ключ с именем шрифты, предоставляемые application.It ' S тип массива, добавьте все имена файлов шрифтов в массив,Примечание:включая расширение файла.
  4. в раскадровке , на Панель навигации Перейти к атрибуту Инспектор,щелкните значок правой кнопкой, выберите уголок шрифт.В всплывающая панель, выберите шрифт на заказ, и выберите семью из вас имя встроенного шрифта.

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

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

UINavigationItem

To обходной путь это:

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

@IBOutlet var customFontTitleView: UIButton!

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

попробуйте это:

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

мой 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)

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

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

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

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

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

это немного более читаемым с помощью литералов:

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

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

  1. во-первых, вы добавляете под элементом навигации один вид в середине и не забудьте установить backGroundColor, чтобы очистить цвет, чтобы иметь тот же цвет навигации:

enter image description here

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

наконец, вы должны иметь что-то вроде этого в контуре документа:

enter image description here

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

enter image description here

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

Swift: -

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

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

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

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

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

iOS 11

enter image description here

С

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
}

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

    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

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

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

}

работа в 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

Comments

    Ничего не найдено.