Swash是UIFont的簡單,安全且表達的抽象,並具有對動態類型的烘焙支持。
要定義自定義字體,只需創建一個符合Font協議的String枚舉即可。
enum Papyrus : String , Font {
case regular = " Papyrus "
case condensed = " Papyrus-Condensed "
}這就是您開始在項目中使用字體所需的一切!
label . font = Papyrus . regular . of ( size : 17 )使用UIFontMetrics進行縮放。設置將adjustsFontForContentSizeCategory為true告訴標籤時,當用戶更改其內容大小偏好時,該標籤會自動更新字體。有關選擇文本樣式的默認尺寸的指南,請參見我們的博客文章,或者僅使用從iOS,WatchOS和TVOS的Apple人類界面指南中提取的Swash提供的默認值。
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一起使用,可用於零maxSize的preferred重量。在任何其他情況下,您都需要在traitCollectionDidChange(_:)或觀察UIContentSizeCategoryDidChange通知中更新字體。這是因為preferred重量直接返回UIFont.preferredFont(forTextStyle:)的結果。
您可以在任何Font上實現boldTextMapping屬性,以支持iOS和TVO上的“粗體文本”設備。
var boldTextMapping: MyFont {
switch self {
case .regular: return .bold
case .bold: return .black
case .black: return self
}
}
現在,如果用戶在其設備設置中打開“大膽文本”,則每個常規的MyFont實例都將變得大膽。
如果您願意,您可以觀察到UIAccessibility.boldTextStatusDidChangeNotification通過NotificationCenter進行更新時設置字體。
您可以在任何Font上實現靜態cascadeList屬性,以支持字體級聯。如果您的字體不支持標籤中使用的字符,則此列表將提供用於使用的後備字體。
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)。
Swash可根據MIT許可證提供。有關更多信息,請參見許可證文件。