SWASH ist eine einfache, sichere und ausdrucksstarke Abstraktion von UIFont mit eingebackener Unterstützung für den dynamischen Typ.
Um eine benutzerdefinierte Schriftart zu definieren, erstellen Sie einfach eine String -Enum, die dem Font -Protokoll entspricht.
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}Das ist alles, was Sie brauchen, um Ihre Schriftart in Ihrem Projekt zu verwenden!
label . font = Papyrus . regular . of ( size : 17 ) Verwendet UIFontMetrics zur Skalierung. Das Einstellen adjustsFontForContentSizeCategory in true gibt das Etikett an, die Schriftart automatisch zu aktualisieren, wenn der Benutzer seine Inhaltsgrößenpräferenz ändert. In unserem Blog -Beitrag finden Sie Anleitungen zur Auswahl von Standardgrößen für Textstile oder verwenden Sie einfach die Standard -Standard -Standards für iOS, Watchos und 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 ) Verwendet die Systemschriftskalierung, kein Standardgrößenwert. adjustsFontForContentSizeCategory UIContentSizeCategoryDidChange die Verwendung von UIFontMetrics , daher ist sie für benutzerdefinierte Schriftarten vor iOS 11 nicht nützlich traitCollectionDidChange(_:)
label . font = Papyrus . condensed . of ( style : . headline )
// Optional size cutoff
label . font = GillSans . bold . of ( style : . title1 , maxSize : 30 ) Sie können SystemFont verwenden, um den dynamischen Typ für verschiedene Gewichte zu unterstützen und die Schriftsyntax in Ihrem Projekt weiter zu vereinbaren.
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 ) Wichtiger Hinweis: adjustsFontForContentSizeCategory funktioniert nur mit SystemFont für das preferred Gewicht mit einem NIL maxSize -Wert. In jedem anderen Fall müssen Sie die Schriftart entweder in traitCollectionDidChange(_:) aktualisieren oder die Benachrichtigung UIContentSizeCategoryDidChange beobachten. Dies liegt daran, dass das preferred Gewicht das Ergebnis von UIFont.preferredFont(forTextStyle:) .
Sie können die boldTextMapping -Eigenschaft auf jeder Font implementieren, um die Einstellung "Fett Text" auf iOS und tvOS zu unterstützen.
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
Jetzt wird jede reguläre MyFont -Instanz mutig, wenn der Benutzer in den Geräteeinstellungen "Fettdruck" eingeschaltet hat.
NotificationCenter Sie möchten, können Sie UIAccessibility.boldTextStatusDidChangeNotification beobachten.
Sie können die statische cascadeList -Eigenschaft auf jeder Font implementieren, um die Schriftkaskadierung zu unterstützen. Für den Fall, dass Ihre Schriftart keinen Charakter unterstützt, der in einem Etikett verwendet wird, bietet diese Liste Fallback -Schriftarten zur Verfügung.
enum Papyrus: String, Font {
case condensed = "Papyrus-Condensed"
case regular = "Papyrus"
var cascadeList: [CascadingFontProperties] {
[.init(Damascus.regular)]
}
}
Papyrus unterstützt arabische Charaktere nicht. Hier haben wir Damaskus als Fallback zur Verfügung gestellt. Wenn kein Fallback bereitgestellt wird, wird die Systemschrift für nicht unterstützte Zeichen verwendet.
SWASH kann versuchen, Ihre Schriftkesselplatte für Sie zu protokollieren!
Swash . logBoilerplate ( forFontsWithFamilyNamesContaining : " gill " )Ausgabe:
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"
}
Kopieren Sie einfach die Ausgabe in Ihr Projekt. Sie müssen wahrscheinlich noch die Fallnamen ein wenig doxtern.
Wenn Ihre benutzerdefinierte Schriftart nicht initialisieren kann, wird assertionFailure(_:file:line:) aufgerufen. Dadurch wird Debuggs mit dem Standard -Compiler -Optimierungssatz von Standard -Onone -Bühnen abgestürzt. Dies soll dazu beitragen, fehlgeschlagene Schriftartinitialisierungen zu identifizieren, die ansonsten schwer zu fangen sein können. Release -Builds mit höheren Optimierungsstufen stürzen nicht ab , sodass Sie sich keine Sorgen machen müssen, dass Ihre App in der Produktion über eine alberne Schriftart stürzt.
pod 'Swash' github "Mindgrub/Swash"
Stellen Sie sicher, dass Sie Ihre Plattform beim Aktualisieren angeben (z. B. carthage update --platform iOS ). Andernfalls werden alle 3 Frameworks (iOS, TVOS und WATCHOS) hinzugefügt.
SWASH ist unter der MIT -Lizenz erhältlich. Weitere Informationen finden Sie in der Lizenzdatei.