Поиск…


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

Поддержка пользовательских шрифтов
Приложения, которые хотят использовать пользовательские шрифты, теперь могут включать эти шрифты в свой пакет приложений и регистрировать эти шрифты с помощью системы, включая ключ UIAppFonts в свой файл Info.plist. Значение этого ключа представляет собой массив строк, идентифицирующих файлы шрифтов в пакете приложения. Когда система видит ключ, он загружает указанные шрифты и делает их доступными для приложения.

После того, как шрифты были установлены в Info.plist , вы можете использовать свои пользовательские шрифты как любой другой шрифт в IB или программно.

  1. Перетащите свой шрифт в папку Xcode Supporting Files. Не забудьте отметить свое приложение в разделе «Добавить в целевые объекты». С этого момента вы можете использовать этот шрифт в IB и выбрать его из палитры шрифтов.

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

  1. Чтобы этот шрифт был доступен на устройстве, откройте Info.plist и добавьте Fonts provided by application key (UIAppFonts). Добавьте имя шрифта в качестве значения в клавишу Item 0. Примечание. Имя шрифта может отличаться от имени файла шрифта. введите описание изображения здесь
  1. Получить пользовательское добавленное имя шрифта, используя нижеприведенный фрагмент

[ 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
  • Нет необходимости устанавливать шрифт для элементов программно.

Шаги, чтобы следовать

  1. Файл шрифта: добавьте файл шрифта (.ttf) в пакет приложений и добавьте запись для шрифта в Info.plist в разделе Шрифт, предоставляемый приложением, как в этой документации пользовательских шрифтов.

  2. Определите категории: добавьте файл, подобный 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
  1. 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
  1. Установка шрифта в раскадровке: добавьте запись в User Defined Runtime Attributes с именем fontName как keyPath и ваше имя пользовательского шрифта как значение с типом как String, как показано.

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

При этом будет установлен ваш пользовательский шрифт во время работы приложения.

Заметки:

  • Lato-Regular - это специальный шрифт, который я использовал.
  • То же имя в файле .ttf, добавленном в комплект, должно использоваться без расширения в раскадровке.
  • Размер шрифта будет таким же, как он определен в инспекторе атрибутов элемента интерфейса.

Применение пользовательских шрифтов для управления в раскадровке

В следующем примере показано, как применять пользовательские шрифты к панели навигации и включает исправления для некоторых причудливых действий, обнаруженных в Xcode. Также можно использовать пользовательские шрифты для любых других UIControls, таких как UILabels , UIButtons и т. Д., Используя инспектор атрибутов после добавления пользовательского шрифта в проект. Обратите внимание на внешние ссылки на рабочие образцы и видео внизу.

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

Navbar

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

Титульный шрифт

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

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

Убедитесь, что это работает на Xcode 7.1.1+. ( См. Примеры ниже )

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

размер

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

Gotchas (deux)

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

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

Результат

Navbar-наклонный

образцы

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

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

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

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

Обычное обходное решение для шрифтов

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

UINavigationItem

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

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

@IBOutlet var customFontTitleView: UIButton!

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

Примечание. Этот пример получен из ответа, который я разместил на SO ( здесь ).



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow