TypographyKit 可以让您轻松地在 iOS 应用中定义版式样式和调色板,帮助您在设计中实现视觉一致性,并支持动态类型,即使在使用自定义字体也是如此。[摘要] [详细说明]
要了解更多有关如何使用 TypographyKit 的信息,请查看以下目录
功能
- 支持 SwiftUI 的 Dynamic Type。
- 通过允许您在单个位置定义所有版式样式和应用程序颜色方案,帮助您在所有屏幕上保持应用程序的视觉一致性。
- 远程托管和更新您的字体样式和颜色方案。 [详情]
- 支持 UIKit 的 Dynamic Type(包括 UILabel、UIButton、UITextField 和 UITextView,以及一些对 NSAttributedString 的支持)。
- 使用零代码(通过在 Interface Builder 中将
fontTextStyleName
键路径的 String 设置为您的版式样式的名称)支持动态类型。
- 使用零代码(通过在 Interface Builder 中将
- 使用 JSON 或属性列表(.plist)来定义您的 TypographyKit 配置。
- 使用 Palette 使程序性中使用相同的颜色方案在 Interface Builder 中可用。 [详情]
- 将字母大小写定义为排版样式的一部分,可通过简单的字母大小写转换使用 字母大小写转换可用的部分。
TypographyKit 5.0.0 的新功能是什么?
-
对 SwiftUI 颜色的第一优先级支持 - 使用
TK.color(named:)
获取颜色。 -
您可以为备用颜色指定一个在您忘记定义颜色时使用的颜色。使用
fallback-color
关键字指定在这种情况下应使用哪种颜色。- 设置:
fallback-color
- 默认值:明亮模式下的黑色,暗模式下的白色。
- 设置:
-
您可以指定一个开发颜色,在开发构建中忘记定义颜色时使用。这个颜色可能与备用颜色不同。例如,您可能希望使用红色这样的易于注意的颜色,以便在开发构建中清楚地显示您忘记定义颜色。但是,您可能想确保这种红色颜色永远不会在生产构建中出现 - 这就是为什么开发颜色永远不会在生产构建中显示(而是使用备用颜色)。
-
设置:
development-color
-
默认值:
red
-
设置:
is-development
-
默认值:在 #DEBUG 构建
true
,否则false
-
设置:
should-use-development-colors
-
默认值:
true
-
-
您可以选择指定,如果开发应用构建未定义颜色,则崩溃。这使得您在开发期间忘记指定颜色值的可能性更低。此设置仅影响开发构建,因此您无需担心生产构建可能会崩溃。
- 设置:
should-crash-if-color-not-found
- 默认值:
false
- 设置:
-
要开始使用框架,现在
import TypographyKit
,然后按以下方式配置
TypographyKit.configure(
with: TypographyKitConfiguration.default
.setConfigurationURL(configurationURL)
)
另请参阅适用于支持 iOS 13 及以上版本的此方法的一个 async
版本
await TypographyKit.configure(with:
TypographyKitConfiguration.default.setConfigurationURL(configurationURL)
)
- 可以通过编程方式指定的所有配置属性也可以在 TypographyKit 配置文件中指定。
- 注意:配置文件中的值将覆盖通过编程方式指定的值。
有关更改的详细列表,请参阅 CHANGELOG.md。
安装
Cocoapods
CocoaPods 是一个将依赖项集成到您的 Xcode 项目的依赖项管理工具。要使用 RubyGems 安装它,请执行以下命令:
gem install cocoapods
要使用 Cocoapods 安装 TypographyKit,只需在您的 Podfile 中添加以下行:
pod "TypographyKit"
然后执行以下命令:
pod install
更多信息请参见这里:点击链接。
Carthage
Carthage 是一个依赖项管理工具,可以为您的项目生成二进制文件进行手动集成。您可以通过以下命令使用 Homebrew 安装它:
brew update
brew install carthage
为了通过 Carthage 将 TypographyKit 集成到您的项目中,请添加以下行到您的项目的 Cartfile:
github "rwbutler/TypographyKit"
在 macOS 终端中运行 carthage update --platform iOS
以构建框架,然后将 TypographyKit.framework
拖到您的 Xcode 项目中。
更多信息请参见这里:点击链接。
使用方法
示例应用
在 示例目录 中有一个示例应用,提供了一些启动指南。
配置
将 TypographyKit.json(示例)或 TypographyKit.plist(示例)包含在您的应用项目中,在其中定义您的颜色和字体样式。
{
"typography-colors": {
"background": {
"dark": "dark royal-blue",
"light": "lightest gray"
},
"gold": "#FFAB01",
"royal-blue": "#08224C"
},
"typography-kit": {
"labels": {
"line-break": "word-wrap"
},
"minimum-point-size": 10,
"maximum-point-size": 100,
"point-step-size": 2,
"point-step-multiplier": 1,
"scaling-mode": "uifontmetrics-with-fallback"
},
"ui-font-text-styles": {
"heading": {
"font-name": "Avenir-Medium",
"point-size": 36,
"text-color": "text",
"letter-case": "regular"
}
}
}
Swift UI
颜色
字体排版(字体)
在您的应用程序中定义与您的 .plist 中定义的匹配的附加 UIFont.TextStyles
extension UIFont.TextStyle
{
static let heading = UIFont.TextStyle(rawValue: "heading")
}
例如,您通常会在 UILabel 上设置文本
self.titleLabel.text = "My label text"
使用 TypographyKit 的 UIKit 扩展
self.titleLabel.text("My label text", style: .heading)
或您的文本已通过 IB 设置,简单地以编程方式设置 UIFont.TextStyle
self.titleLabel.fontTextStyle = .heading
如果您愿意使用字符串,可以通过将 UIKit 元素上的 key path fontTextStyleName
设置为表示您的 fontTextStyle 的字符串值来设置 fontTextStyle
属性 - 在上面的示例中,这将是 'heading'。
使用此方法,您的应用程序可以在零代码的情况下支持动态类型。
当设置一个无额外工作的 UIFont.TextStyle 时,您的 UILabel 和 UIButton 元素将自动响应 iOS 上的动态类型设置更改。
字体样式
您在 TypographyKit.plist 中定义的字体样式可以包括文本颜色和大写字母。
<key>ui-font-text-styles</key>
<dict>
<key>heading</key>
<dict>
<key>font-name</key>
<string>Avenir-Medium</string>
<key>point-size</key>
<integer>36</integer>
<key>text-color</key>
<string>#2C0E8C</string>
<key>letter-case</key>
<string>upper</string>
</dict>
</dict>
扩展样式
从版本 1.1.3 开始,可以使用现有的字体样式创建一个新的样式。例如,想象您想基于现有样式创建一个新的样式,但更改文本颜色。我们可以使用 extends
关键字来扩展已存在的样式,然后指定要覆盖该样式的哪个属性,例如 text-color
属性。
我们可以通过以下方式创建一个新的字体样式 interactive-text
,该样式是基于我们已定义的 paragraph
样式,但更改了文本颜色:
PLIST
<key>paragraph</key>
<dict>
<key>font-name</key>
<string>Avenir-Medium</string>
<key>point-size</key>
<integer>16</integer>
<key>text-color</key>
<string>text</string>
<key>letter-case</key>
<string>regular</string>
</dict>
<key>interactive-text</key>
<dict>
<key>extends</key>
<string>paragraph</string>
<key>text-color</key>
<string>purple</string>
</dict>
JSON
"paragraph": {
"font-name": "Avenir-Medium",
"point-size": 16,
"text-color": "text",
"letter-case": "regular"
},
"interactive-text": {
"extends": "paragraph",
"text-color": "purple"
}
颜色调板
Android从一开始就为开发者提供了一种方式来定义应用的颜色调板,形式是colors.xml文件。Colors.xml还允许开发者通过十六进制值定义颜色。TypographyKit允许开发者通过在TypographyKit.plist中创建条目来定义应用的颜色调板。
<key>typography-colors</key>
<dict>
<key>blueGem</key>
<string>#2C0E8C</string>
</dict>
颜色可以使用十六进制值、RGB值或简单地通过它们的名字(例如“蓝色”)来定义。
<key>typography-colors</key>
<dict>
<key>blueGem</key>
<string>rgb(44, 14, 140)</string>
</dict>
创建一个UIColor扩展来在整个应用中使用新定义的颜色
extension UIColor {
static let blueGem: UIColor = TypographyKit.colors["blueGem"]!
}
或者
extension UIColor {
static let fallback: UIColor = .black
static let blueGem: UIColor = TypographyKit.colors["blueGem"] ?? fallback
}
当你定义TypographyKit.plist中的字型风格时可以使用命名的颜色。
<key>ui-font-text-styles</key>
<dict>
<key>heading</key>
<dict>
<key>font-name</key>
<string>Avenir-Medium</string>
<key>point-size</key>
<integer>36</integer>
<key>text-color</key>
<string>blueGem</string>
</dict>
</dict>
也可以根据具体情况覆盖字型风格的文本颜色
myLabel.text("hello world", style: .heading, textColor: .blue)
UIColor(named:)
TypographyKit支持通过资产目录定义颜色。只需在配置文件中将颜色的名称作为您样式的部分包含在文件中,如果颜色在您的资产目录中找到,它将自动应用。
字母大小写
提供了有用的字符串添加功能,可以轻松地转换字母大小写。
let pangram = "The quick brown fox jumps over the lazy dog"
let upperCamelCased = pangram.letterCase(.upperCamel)
print(upperCamelCased)
// prints TheQuickBrownFoxJumpsOverTheLazyDog
有许多便利函数
let upperCamelCased = pangram.upperCamelCased()
// prints TheQuickBrownFoxJumpsOverTheLazyDog
let kebabCased = pangram.kebabCased()
// prints the-quick-brown-fox-jumps-over-the-lazy-dog
可以给字型风格分配默认的字母大小写。
<key>ui-font-text-styles</key>
<dict>
<key>heading</key>
<dict>
<key>font-name</key>
<string>Avenir-Medium</string>
<key>point-size</key>
<integer>36</integer>
<key>letter-case</key>
<string>upper</string>
</dict>
</dict>
然而,有时可能需要覆盖字型风格默认的字母大小写
myLabel.text("hello world", style: .heading, letterCase: .capitalized)
动态字型配置
默认情况下,当滑动至更大文本时,您的字体点大小会随着iOS辅助功能设置中的每个凹口增加2点,您还可以指定您的UIKit元素如何响应UIContentSizeCategory更改。
您可以指定自己的点步进大小和乘数,通过将包含键《static-analysis》《TypographyKit">
<key>typography-kit</key>
<dict>
<key>minimum-point-size</key>
<integer>10</integer>
<key>maximum-point-size</key>
<integer>100</integer>
<key>point-step-size</key>
<integer>2</integer>
<key>point-step-multiplier</key>
<integer>1</integer>
</dict>
可选,您可以使用属性 minimum-point-size
和 maximum-point-size
来将字体点大小限制在一个或两个边界值。
远程配置
TypographyKit 还允许您远程托管配置,以便您的颜色和字体样式可以动态更新。要做到这一点,只需将以下行添加到您的应用程序代理中,这样它就可以在应用程序完成启动时被调用即可。
TypographyKit.configurationURL = URL(string: "https://github.com/rwbutler/TypographyKit/blob/main/Example/TypographyKit/TypographyKit.plist")
您的字体样式和颜色将在下一次应用程序启动时更新。但是,如果您需要更早更新样式,可以调用 TypographyKit.refresh()
。
作者
许可
TypographyKit 使用 MIT 许可。有关更多信息,请参阅 LICENSE 文件。
其他软件
控件
- AnimatedGradientView - 使 iOS 的渐变动画变得简单而强大。
AnimatedGradientView |
---|
![]() |
框架
- Cheats - 为现代 iOS 应用提供复古作弊码。
- Connectivity - 在您的 iOS 应用中确定网络连接性的可达性功能得到改进。
- FeatureFlags - 允许开发者配置功能标志,使用捆绑的或远程托管的 JSON 配置文件运行多个 A/B 或 MVT 测试。
- FlexibleRowHeightGridLayout - 专为支持动态类型而设计的 UICollectionView 网格布局,允许每行的尺寸根据内容进行调整。
- Hash - 轻量级生成消息摘要和 HMAC 的方法,支持包括 MD5、SHA-1、SHA-256 在内的常用哈希函数。
- Skylark - 完全基于 Swift 的 BDD 测试框架,用于使用 Gherkin 语法编写 Cucumber 场景。
- TailorSwift - 包含 Swift Core Library/Foundation 框架扩展的有用集合。
- TypographyKit - 提供动态类型支持的 iOS 上一致的、可访问的视觉样式。
- Updates - 自动检测应用程序更新,并且优雅地提示用户更新。
Cheats | Connectivity | FeatureFlags | Skylark | TypographyKit | Updates |
---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
工具
- Clear DerivedData - 工具可快速通过从终端输入
cdd
来清除您的 DerivedData 目录。 - Config Validator - Config Validator 验证并上传您的配置文件,并在 CI 过程中作为清除 CDN 的一部分。
- IPA Uploader - 将您的应用程序上传到 TestFlight 和 App Store。
- Palette - 使您的 TypographyKit 颜色调色板在 Xcode Interface Builder 中可用。
Config Validator | IPA Uploader | Palette |
---|---|---|
![]() |
![]() |
![]() |