iOS
Пользовательские шрифты
Поиск…
Встраивание пользовательских шрифтов
Поддержка пользовательских шрифтов
Приложения, которые хотят использовать пользовательские шрифты, теперь могут включать эти шрифты в свой пакет приложений и регистрировать эти шрифты с помощью системы, включая ключ UIAppFonts в свой файл Info.plist. Значение этого ключа представляет собой массив строк, идентифицирующих файлы шрифтов в пакете приложения. Когда система видит ключ, он загружает указанные шрифты и делает их доступными для приложения.
После того, как шрифты были установлены в Info.plist
, вы можете использовать свои пользовательские шрифты как любой другой шрифт в IB или программно.
- Перетащите свой шрифт в папку Xcode Supporting Files. Не забудьте отметить свое приложение в разделе «Добавить в целевые объекты». С этого момента вы можете использовать этот шрифт в IB и выбрать его из палитры шрифтов.
- Чтобы этот шрифт был доступен на устройстве, откройте
Info.plist
и добавьтеFonts provided by application key
(UIAppFonts). Добавьте имя шрифта в качестве значения в клавишу Item 0. Примечание. Имя шрифта может отличаться от имени файла шрифта.
- Получить пользовательское добавленное имя шрифта, используя нижеприведенный фрагмент
[ Swift 3 ]
for family in UIFont.familyNames {
print("\(family)")
for name in UIFont.fontNames(forFamilyName: family) {
print(" \(name)")
}
}
[ Цель - C ]
for (NSString *familyName in [UIFont familyNames]){
NSLog(@"Family name: %@", familyName);
for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
NSLog(@"--Font name: %@", fontName);
}
}
Пользовательские шрифты с раскадровки
Пользовательские шрифты для компонентов пользовательского интерфейса из раскадровки можно легко достичь с помощью пользовательских атрибутов Runtime в раскадровке и категориях .
Преимущества таковы,
- Нет необходимости определять выходные точки для элемента ui
- Нет необходимости устанавливать шрифт для элементов программно.
Шаги, чтобы следовать
Файл шрифта: добавьте файл шрифта (.ttf) в пакет приложений и добавьте запись для шрифта в Info.plist в разделе Шрифт, предоставляемый приложением, как в этой документации пользовательских шрифтов.
Определите категории: добавьте файл, подобный UIKit + IBExtensions, и добавьте категории элементов UI, такие как UILabel, UIButton и т. Д., Для которых вы хотите установить собственный шрифт. Все категории будут иметь настраиваемое свойство say fontName . Это позже будет использоваться из раскадровки для установки пользовательского шрифта (как на шаге 4).
UIKit + IBExtensions.h
#import <UIKit/UIKit.h>
//Category extension for UILabel
@interface UILabel (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UITextField
@interface UITextField (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
// Category extension for UIButton
@interface UIButton (IBExtensions)
@property (nonatomic, copy) NSString *fontName;
@end
- Getters and Setters: Определите getters и seters для свойства fontName по каждой добавленной категории.
UIKit + IBExtensions.m
#import "UIKit+IBExtensions.h"
@implementation UILabel (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UITextField (IBExtensions)
- (NSString *)fontName {
return self.font.fontName;
}
- (void)setFontName:(NSString *)fontName {
self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
}
@end
@implementation UIButton (IBExtensions)
- (NSString *)fontName {
return self.titleLabel.font.fontName;
}
- (void)setFontName:(NSString *)fontName{
self.titleLabel.font = [UIFont fontWithName:fontName size:self.titleLabel.font.pointSize];
}
@end
- Установка шрифта в раскадровке: добавьте запись в User Defined Runtime Attributes с именем fontName как keyPath и ваше имя пользовательского шрифта как значение с типом как String, как показано.
При этом будет установлен ваш пользовательский шрифт во время работы приложения.
Заметки:
- Lato-Regular - это специальный шрифт, который я использовал.
- То же имя в файле .ttf, добавленном в комплект, должно использоваться без расширения в раскадровке.
- Размер шрифта будет таким же, как он определен в инспекторе атрибутов элемента интерфейса.
Применение пользовательских шрифтов для управления в раскадровке
В следующем примере показано, как применять пользовательские шрифты к панели навигации и включает исправления для некоторых причудливых действий, обнаруженных в Xcode. Также можно использовать пользовательские шрифты для любых других UIControls, таких как UILabels , UIButtons и т. Д., Используя инспектор атрибутов после добавления пользовательского шрифта в проект. Обратите внимание на внешние ссылки на рабочие образцы и видео внизу.
- Выберите свою навигационную панель в своем навигационном контроллере
- Изменение шрифта заголовка в инспекторе атрибутов
(Вам, скорее всего, нужно будет переключить оттенок панели для панели навигации, прежде чем Xcode возьмет новый шрифт)
Примечания (Предостережения)
Убедитесь, что это работает на Xcode 7.1.1+. ( См. Примеры ниже )
- Вам нужно переключить оттенок навигационной панели до того, как шрифт вступит в силу (кажется, что ошибка в Xcode, вы можете переключить его обратно на значение по умолчанию, и шрифт будет зависеть)
- Если вы выберете системный шрифт ~ Обязательно убедитесь, что размер не равен 0.0 (иначе новый шрифт будет проигнорирован)
- Кажется, что это работает без проблем, когда только один NavBar находится в иерархии представлений. Похоже, что вторичные NavBars в одном стеке игнорируются. (Обратите внимание: если вы покажете навигационную навигационную панель главного навигатора, все остальные пользовательские настройки NavBar будут проигнорированы).
Gotchas (deux)
Некоторые из них повторяются, что означает, что они, скорее всего, заслуживают внимания.
- Иногда раскадровка xml становится коррумпированной. Это требует, чтобы вы просмотрели структуру в Storyboard в качестве режима исходного кода (щелкните правой кнопкой мыши файл раскадровки> Открыть как ...)
- В некоторых случаях тег navigationItem, связанный с пользовательским атрибутом runtime, был установлен как дочерний элемент xml тега представления вместо тега контроллера представления. Если это так, удалите его между метками для правильной работы.
- Переключите NavBar Tint, чтобы гарантировать, что пользовательский шрифт используется.
- Проверьте параметр размера шрифта, если не используется динамический стиль шрифта
- Иерархия просмотра переопределит настройки. Кажется, что один шрифт за стек возможен.
Результат
образцы
- Видео, показывающее несколько шрифтов в расширенном проекте
- Простая загрузка источника
- Продвинутая загрузка проекта ~ Показывает несколько шрифтов NavBar и настраиваемый шрифт
- Видео, показывающее несколько шрифтов и пользовательские шрифты
Обработка пользовательских шрифтов
Примечание ~ Хороший контрольный список можно найти на веб-сайте Code With Chris, и вы можете увидеть образец проекта загрузки.
Если у вас есть собственный шрифт и вы хотите использовать его в своем раскадровке, тогда есть достойный набор ответов на следующий SO-вопрос . Один ответ определяет эти шаги.
- Получите пользовательский файл шрифта (.ttf, .ttc)
- Импортируйте файлы шрифтов в проект Xcode
- В app-info.plist добавьте ключ с именем Fonts, предоставляемый приложением. Это тип массива, добавьте все имена файлов шрифтов в массив, обратите внимание: включая расширение файла.
- В раскадровке на навигационной панели перейдите к Инспектору атрибутов, щелкните правой кнопкой мыши в области выбора шрифта. На всплывающей панели выберите «Шрифт» для «Пользовательский» и выберите «Семейство» вложенного имени шрифта.
Обычное обходное решение для шрифтов
Таким образом, Xcode, естественно, выглядит так, как будто он может обрабатывать пользовательские шрифты в UINavigationItem, но эта функция просто не обновляется должным образом (выбранный шрифт игнорируется).
Чтобы обойти это:
Один из способов - исправить использование раскадровки и добавить строку кода: сначала добавьте UIView (UIButton, UILabel или какой-либо другой подкласс UIView) в контроллер просмотра (а не элемент навигации ... Xcode в настоящее время не позволяет тот). После того, как вы добавите элемент управления, вы можете изменить шрифт в раскадровке и добавить ссылку в качестве выхода на ваш контроллер просмотра. Просто присвойте это представление UINavigationItem.titleView. Вы также можете указать текстовое имя в коде. Сообщенная ошибка (23600285).
@IBOutlet var customFontTitleView: UIButton!
//Sometime later...
self.navigationItem.titleView = customFontTitleView
Примечание. Этот пример получен из ответа, который я разместил на SO ( здесь ).