Swash é uma abstração simples, segura e expressiva de UIFont , com suporte assado para o tipo dinâmico.
Para definir uma fonte personalizada, basta criar uma String enum em conformidade com o protocolo Font .
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}É tudo o que você precisa para começar a usar sua fonte em seu projeto!
label . font = Papyrus . regular . of ( size : 17 ) Usa UIFontMetrics para escala. A configuração adjustsFontForContentSizeCategory para true diz ao rótulo para atualizar automaticamente a fonte quando o usuário altera a preferência do tamanho do conteúdo. Consulte a nossa postagem no blog para obter orientações sobre como escolher tamanhos padrão para estilos de texto ou apenas usar os padrões fornecidos de Swash retirados das diretrizes de interface humana da Apple para iOS, watchOS e 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 ) Usa a escala da fonte do sistema, sem valor de tamanho padrão. adjustsFontForContentSizeCategory requer o uso de UIFontMetrics , por isso não é de utilidade para fontes personalizadas antes do iOS 11. Você precisará atualizar as fontes manualmente, seja em traitCollectionDidChange(_:) ou observando a notificação UIContentSizeCategoryDidChange .
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) Você pode usar SystemFont para oferecer suporte ao tipo dinâmico para diferentes pesos e unificar ainda mais a sintaxe da fonte em seu projeto.
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 ) NOTA IMPORTANTE: adjustsFontForContentSizeCategory funciona apenas com SystemFont para o peso preferred com um valor nulo maxSize . Em qualquer outro caso, você precisará atualizar a fonte no traitCollectionDidChange(_:) ou observando a notificação UIContentSizeCategoryDidChange . Isso ocorre porque o peso preferred retorna diretamente o resultado do UIFont.preferredFont(forTextStyle:) .
Você pode implementar a propriedade boldTextMapping em qualquer Font para suportar a configuração do dispositivo "Bold Text" no iOS e TVOS.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
Agora, toda instância regular MyFont ficará em negrito se o usuário tiver "texto em negrito" ativado nas configurações do dispositivo.
Se desejar, você pode observar UIAccessibility.boldTextStatusDidChangeNotification via NotificationCenter e defina suas fontes quando isso é atualizado.
Você pode implementar a propriedade estática cascadeList em qualquer Font a fim de suportar cascata da fonte. No caso de sua fonte não suportar um personagem usado em um rótulo, esta lista fornecerá fontes de fallback para usar.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
Papyrus não apóia caracteres árabes. Então, aqui fornecemos a Damasco como fallback. Se não for fornecido fallback, a fonte do sistema será usada para caracteres não suportados.
O Swash pode tentar registrar sua fonte de caldeira para você!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )Saída:
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"
}
Basta copiar cola a saída para o seu projeto. Você provavelmente ainda precisará médico os nomes do caso.
Se sua fonte personalizada não inicializar, assertionFailure(_:file:line:) será chamado. Isso falhará o Debug Builds com o conjunto de otimização de compilador padrão -Onone . Isso é para ajudar a identificar as inicializações de fontes com falha que, de outra forma, podem ser difíceis de capturar. As compilações de liberação com níveis de otimização mais altos não travarão , então você não precisa se preocupar com o seu aplicativo colidindo com a produção em uma fonte boba.
pod 'Swash' github "Mindgrub/Swash"
Certifique -se de especificar sua plataforma quando você atualizar (por exemplo, carthage update --platform iOS ). Caso contrário, todas as três estruturas (iOS, TVOS e WatchOS) serão adicionadas.
Swash está disponível sob a licença do MIT. Consulte o arquivo de licença para obter mais informações.