Шрифт та колір заголовка навігаційної панелі iOS змінюють


101

Отже, у мене є цей код, який повинен змінити шрифт заголовка навігаційного рядка, але він 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];

Відповіді:


251

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

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

Правка: Швидкий 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)!]

Швидкий 3:

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

2
Розмір залишається однаковим, незалежно від значення, яке я пробую
Рафаель Ройер-Рівард

1
Так, я зрозумів, що шрифт не завантажений належним чином. Досі не можу зрозуміти, чому я імпортував OpenSans-Light та OpenSans-Regular однаково, тільки OpenSans-Light здається, що він може бути корисним ...
Рафаель Ройер-Рівард

1
У коді Obj-C відсутня дужка, що закривається. Це повинно бути: [self.navigationController.navigationBar setTitleTextAttributes: @ {NSForegroundColorAttributeName: [UIColor redColor], NSFontAttributeName: [UIFont fontWithName: @ "mplus-1c-regular" розмір: 21]};
Рука Ділана

Гота посилання для зміни backBarButton шрифту: stackoverflow.com/a/16538596/5967144
soorej Баби

А як щодо використання LargeTitle NavBar? Я не знаходжу navigationBar.LargeTitleTextAttributesв цьому відношенні жодного чи нічого. Чи знаєте ви, як встановити шрифт LargeTitle в усьому світі?
iKK

54

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

1. Виберіть панель навігації у своєму навігаційному контролері

навбар

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

title-font

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

Примітки (застереження)

Перевірено, що це працює на Xcode 7.1.1+. ( Дивіться зразки нижче )

  1. Вам потрібно перемкнути відтінок навігаційної панелі до того, як шрифт набуде чинності (здається, що помилка в Xcode; ви можете переключити її назад на типову і шрифт залишиться)
  2. Якщо ви вибрали системний шрифт ~ Не забудьте переконатися, що розмір не дорівнює 0,0 (інакше новий шрифт буде проігноровано)

розмір

  1. Схоже, це працює без проблем, коли в ієрархії перегляду лише один NavBar. Здається, що вторинні NavBars в одному стеці ігноруються. (Зверніть увагу, що якщо ви показуєте navBar головного контролера навігації, всі інші власні налаштування navBar ігноруються).

Gotchas (deux)

Деякі з них повторюються, що означає, що їх, мабуть, варто відзначити.

  1. Іноді xml розгортається. Це вимагає, щоб ви переглянули структуру в Storyboard як режим вихідного коду (клацніть правою кнопкою миші файл раскадровки> Відкрити як ...)
  2. У деяких випадках тег navigationItem, пов’язаний з визначеним користувачем атрибутом виконання, встановлювався як дочірній елемент xml тегу перегляду замість тегу контролера перегляду. Якщо це так, видаліть його між тегами для належної роботи.
  3. Перемістіть відтінок NavBar, щоб переконатися, що використовується спеціальний шрифт.
  4. Перевірте параметр розміру шрифту, якщо ви не використовуєте динамічний стиль шрифту
  5. Ієрархія перегляду замінить налаштування. Здається, що один шрифт на стек можливий.

Результат

навбар-курсив

Зразки

Обробка користувацьких шрифтів

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

Якщо у вас є власний шрифт і ви хочете використовувати його у вашій дошці, то на наступному запитанні ТА є гідний набір відповідей . Одна відповідь визначає ці кроки.

  1. Отримайте власний файл шрифту (.ttf, .ttc)
  2. Імпортуйте файли шрифтів у ваш проект Xcode
  3. У додаток-info.plist додайте ключ з назвою Шрифти, надані програмою. Це тип масиву, додайте до масиву всі назви файлів шрифту, примітка: включаючи розширення файлу.
  4. У дошці розкадрування на навігаційній панелі перейдіть до інспектора атрибутів, натисніть правою кнопкою піктограму області вибору шрифту. На спливаючої панелі виберіть Шрифт на замовлення та виберіть Встановлене ім'я шрифту "Сімейство".

Власне вирішення шрифту

Таким чином, Xcode природно виглядає так, що він може обробляти власні шрифти в UINavigationItem, але ця функція просто не оновлюється належним чином (вибраний шрифт ігнорується).

UINavigationItem

Щоб вирішити це:

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

@IBOutlet var customFontTitleView: UIButton!

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

21

Спробуйте це:

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

14

Мій код 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)

8

Додайте цей єдиний рядок у своєму делеґаті додатків - Did Finish Lauch. Це змінить шрифт, колір панелі навігації протягом усієї програми.

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

5

Ось відповідь на ваше запитання:

Перемістіть свій код до методу нижче, оскільки назва навігаційної панелі оновлена ​​після завантаження перегляду. Я спробував додати вищевказаний код у viewDidLoad не працює, він працює чудово у методі viewDidAppear.

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

3

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

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

2

Це трохи читабельніше за допомогою літералів:

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

2

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

  1. По-перше, ви додасте в пункті навігації один вид посередині і не забудьте встановити backGroundColor для очищення кольору, щоб мати той самий колір navBar:

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

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

Нарешті, ви повинні мати щось подібне у структурі документа:

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

І щось подібне у вашому ViewController:

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

Сподіваюся, це може допомогти.


2

Швидкий: -

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

1

Цей варіант для альтернативи Swift 4 (вже відповідь @Josh):

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

1

iOS 11

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

Ціль-С

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
}

1

Для Objective-C встановіть шрифт і колір

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

}

0

Ось відповідь на Swift 4 😁:

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

0

Не забудьте додати неочищені значення клавіш, щоб уникнути помилок компіляції.

    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

0

Швидкий 4.2

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

0

Додати це розширення

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

Додайте наступний рядок у viewDidLoad ()

self.navigationController?.navigationBar.changeFont()

-1

Робота в 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.