Swash est une abstraction simple, sûre et expressive d' UIFont avec le support de type dynamique.
Pour définir une police personnalisée, créez simplement une énumération String conforme au protocole Font .
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}C'est tout ce dont vous avez besoin pour commencer à utiliser votre police dans votre projet!
label . font = Papyrus . regular . of ( size : 17 ) Utilise UIFontMetrics pour la mise à l'échelle. Le paramètre adjustsFontForContentSizeCategory en true indique à l'étiquette de mettre à jour automatiquement la police lorsque l'utilisateur modifie la préférence de la taille de leur contenu. Consultez notre article de blog pour obtenir des conseils sur le choix des tailles par défaut pour les styles de texte, ou utilisez simplement les défaillances fournies par Swash tirées des directives d'interface humaine d'Apple pour iOS, WatchOS et 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 ) Utilise la mise à l'échelle des polices système, aucune valeur de taille par défaut. adjustsFontForContentSizeCategory nécessite l'utilisation d' UIFontMetrics , il ne sert donc d'aucune utilité pour les polices personnalisées avant iOS 11. Vous devrez mettre à jour les polices manuellement, soit dans traitCollectionDidChange(_:) ou en observant la notification UIContentSizeCategoryDidChange .
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) Vous pouvez utiliser SystemFont pour prendre en charge le type dynamique pour différents poids et unifier davantage la syntaxe de police dans votre projet.
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 ) REMARQUE IMPORTANT: adjustsFontForContentSizeCategory ne fonctionne qu'avec SystemFont pour le poids preferred avec une valeur maxSize nulle. Dans tout autre cas, vous devrez mettre à jour la police dans traitCollectionDidChange(_:) ou en observant la notification UIContentSizeCategoryDidChange . En effet, le poids preferred renvoie directement le résultat de UIFont.preferredFont(forTextStyle:) .
Vous pouvez implémenter la propriété boldTextMapping sur n'importe quelle Font afin de prendre en charge le paramètre de périphérique "Texte en gras" sur iOS et TVOS.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
Maintenant, chaque instance MyFont ordinaire deviendra audacieuse si l'utilisateur a le "texte en gras" activé dans les paramètres de son appareil.
Si vous le souhaitez, vous pouvez observer UIAccessibility.boldTextStatusDidChangeNotification via NotificationCenter et définir vos polices lorsque cela se met à jour.
Vous pouvez implémenter la propriété cascadeList statique sur n'importe quelle Font afin de prendre en charge la cascade de police. Dans le cas où votre police ne prend pas en charge un personnage utilisé dans une étiquette, cette liste fournira des polices de secours à utiliser.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
Papyrus ne soutient pas les caractères arabes. Donc, ici, nous avons fourni Damas en tant que repli. Si aucune repose n'est fournie, la police du système sera utilisée pour des caractères non pris en charge.
Swash peut tenter de enregistrer votre passe-partout pour vous!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )Sortir:
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"
}
Il suffit de copier la sortie dans votre projet. Vous aurez probablement encore besoin de docter un peu les noms de cas.
Si votre police personnalisée ne parvient pas à initialiser, assertionFailure(_:file:line:) est appelé. Cet accident de débogage des builds avec l'ensemble d'optimisation du compilateur par défaut -Onone . Il s'agit d'aider à identifier les initialisations de polices ratées qui peuvent autrement être difficiles à attraper. Les constructions de libération avec des niveaux d'optimisation plus élevés ne s'écraseront pas , vous n'avez donc pas à vous soucier du fait que votre application s'écrase en production sur une police idiote.
pod 'Swash' github "Mindgrub/Swash"
Assurez-vous de spécifier votre plate-forme lorsque vous mettez à jour (par exemple carthage update --platform iOS ). Sinon, les 3 frameworks (iOS, TVOS et Watchos) seront ajoutés.
Swash est disponible sous la licence MIT. Voir le fichier de licence pour plus d'informations.