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许可证提供。有关更多信息,请参见许可证文件。