Swash-это простая, безопасная и выразительная абстракция UIFont с выпеченной поддержкой динамического типа.
Чтобы определить пользовательский шрифт, просто создайте перечисление String , которая соответствует протоколу Font .
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}Это все, что вам нужно, чтобы начать использовать свой шрифт в вашем проекте!
label . font = Papyrus . regular . of ( size : 17 ) Использует UIFontMetrics для масштабирования. Настройка adjustsFontForContentSizeCategory В true сообщает метке автоматически обновлять шрифт, когда пользователь изменяет предпочтения размера своего контента. См. Наше сообщение в блоге для выбора размеров по умолчанию для текстовых стилей или просто используйте Swash's Deflect Defaults, полученные из руководящих принципов Apple по интерфейсу для iOS, часов и TVOS.
label1 . adjustsFontForContentSizeCategory = true
label2 . adjustsFontForContentSizeCategory = true
label1 . font = Papyrus . condensed . of ( textStyle : . headline )
// Optional size cutoff and default size.
label2 . font = GillSans . bold . of ( textStyle : . title1 , defaultSize : 28 , maxSize : 38 ) Использует масштабирование шрифтов системы, без значения размера по умолчанию. adjustsFontForContentSizeCategory требует использования UIFontMetrics , поэтому это бесполезно для пользовательских шрифтов перед iOS 11. Вам придется обновлять шрифты вручную, либо в traitCollectionDidChange(_:) или наблюдение за уведомлением UIContentSizeCategoryDidChange .
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) Вы можете использовать SystemFont для поддержки динамического типа для различных весов и дополнительно объединить синтаксис шрифта в вашем проекте.
label1 . font = SystemFont . light . of ( size : 17 )
label2 . adjustsFontForContentSizeCategory = true
label2 . font = SystemFont . preferred . of ( textStyle : . body )
label3 . font = SystemFont . semiboldItalic . of ( textStyle : . body , maxSize : 30 ) Важное примечание: adjustsFontForContentSizeCategory работает только с SystemFont для preferred веса с значением NIL maxSize . В любом другом случае вам нужно будет обновить шрифт либо в traitCollectionDidChange(_:) , либо, наблюдая за уведомлением UIContentSizeCategoryDidChange . Это связано с тем, что preferred вес непосредственно возвращает результат UIFont.preferredFont(forTextStyle:) .
Вы можете реализовать свойство boldTextMapping на любом Font , чтобы поддержать настройку устройства «Смелый текст» на iOS и TVO.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
Теперь каждый обычный экземпляр MyFont станет смелым, если у пользователя «жирный текст» включен в настройки своего устройства.
Если вы хотите, вы можете наблюдать за UIAccessibility.boldTextStatusDidChangeNotification с помощью NotificationCenter и установить свои шрифты при обновлениях.
Вы можете реализовать статическое cascadeList свойство на любом Font , чтобы поддержать каскадирование шрифта. В случае, если ваш шрифт не поддерживает персонажа, который используется в этикетке, этот список предоставит резервные шрифты для использования.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
Папирус не поддерживает арабские персонажи. Итак, здесь мы предоставили Дамаску в качестве запасного. Если запасной запас не будет предоставлен, системный шрифт будет использоваться для неподдерживаемых символов.
Swash может попытаться зарегистрировать для вас шрифт!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )Выход:
enum GillSans: String, Font {
case GillSans-Italic = "GillSans-Italic"
case GillSans-SemiBold = "GillSans-SemiBold"
case GillSans-UltraBold = "GillSans-UltraBold"
case GillSans-Light = "GillSans-Light"
case GillSans-Bold = "GillSans-Bold"
case GillSans = "GillSans"
case GillSans-SemiBoldItalic = "GillSans-SemiBoldItalic"
case GillSans-BoldItalic = "GillSans-BoldItalic"
case GillSans-LightItalic = "GillSans-LightItalic"
}
Просто скопируйте вывод в свой проект. Вероятно, вам все равно нужно немного поставить дело.
Если ваш пользовательский шрифт не может инициализировать, assertionFailure(_:file:line:) вызывается. Это будет сбоем отладочной отладки с помощью набора оптимизации -Onone по умолчанию. Это следует помочь определить неудачные инициализации шрифтов, которые в противном случае могут быть трудно поймать. Сборки выпуска с более высокими уровнями оптимизации не будут обрушиться , поэтому вам не нужно беспокоиться о том, что ваше приложение сбои в производстве из -за глупого шрифта.
pod 'Swash' github "Mindgrub/Swash"
Обязательно укажите свою платформу при обновлении (например, carthage update --platform iOS ). В противном случае будут добавлены все 3 фреймворки (iOS, TVOS и WatchOS).
Смазание доступно по лицензии MIT. Смотрите файл лицензии для получения дополнительной информации.