Стандартный шрифт для UINavigationBar Большой заголовок в iOS 11?

Я знаю, как установить цвет и изменить шрифт для большого заголовка в iOS 11, но мне трудно найти шрифт по умолчанию и размер шрифта для большого заголовка. Я хотел бы воспроизвести шрифт в другом месте в приложении. Я пробовал следующее, но они не дают результатов для шрифта или размера шрифта. Не уверен, где еще я должен искать это.

NSLog(@"self.navigationController.navigationBar.largeTitleTextAttributes:%@",self.navigationController.navigationBar.largeTitleTextAttributes);

NSDictionary *dict = self.navigationController.navigationBar.largeTitleTextAttributes;
UIFont *font = [dict objectForKey:@"NSFontAttributeName"];
NSLog(@"font is.. %@, %@, %@",font,font.fontName,font.fontDescriptor);

3 ответа

Решение

Правильное решение для получения шрифта большого заголовка заключается в следующем:

Objective-C:

UIFont *font = [UIFont preferredFontForTextStyle: UIFontTextStyleLargeTitle];
NSLog("%@", font);

Swift:

let font = UIFont.preferredFont(forTextStyle: .largeTitle)
print(font)

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

Выше будет распечатано следующее по умолчанию (на игровой площадке):

семейство шрифтов: ".SFUIDisplay"; Вес шрифта: нормальный; стиль шрифта: нормальный; размер шрифта: 34.00pt

Обратите внимание, что использование .largeTitle в приведенном выше коде должен вызываться только с iOS 11. Если ваше приложение поддерживает iOS 10 или более раннюю версию, вы должны обернуть этот код в надлежащее использование @available,

В iOS 13 именно такой шрифт используется для больших заголовков на панелях навигации. Я сравнил скриншоты попиксельно и они совпадают!

UIFont.systemFont(ofSize: 34, weight: .bold)

Изменить: я открыл инспектор интерфейса пользователя, и он говорит:

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

Нет необходимости кодировать здесь:)

iOS12 Большая система титров Bold 34 (Сан-Франциско)

[UIFont boldSystemFontOfSize:34]

iOS9 - iOS12 System Semibold 17 (Сан-Франциско)

[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]

iOS8 System Semibold 17 (Helvetica Neue)

[UIFont systemFontOfSize:17 weight:UIFontWeightSemibold]

iOS7 System Bold 17 (Helvetica Neue)

[UIFont boldSystemFontOfSize:17];

Попробуйте что-то вроде этого:

if #available(iOS 11.0, *) { navigationBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white, .font: UIFont(name: "HelveticaNeue-Bold", size: 20)!] }

Самый простой способ - использовать

UIFont.preferredFont(forTextStyle: .largeTitle)

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

UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)

Полный код:

let normalTitleFont = UIFont.preferredFont(forTextStyle: .largeTitle)
let largeTitleFont = UIFont(descriptor: normalTitleFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalTitleFont.pointSize)

Этот подход лучше по сравнению с жестким кодированием размеров или шрифтов.

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

Значение стиля текста.largeTitle также изменится, и ваш заголовок получит правильный стиль.

Я на самом деле нашел ответ, попробовав разные шрифты и размеры. Теперь, отказ от ответственности, это может измениться с доступностью / динамическими размерами шрифта. Но шрифт и размер я нашел

[UIFont systemFontOfSize:32 weight:UIFontWeightBold]

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

Я уверен, по крайней мере, для iOS 11+ это

Свифт 5:

UIFont.init(name: ".SFUIDisplay-Bold", size: 32)
Другие вопросы по тегам