认识扩展的 San Francisco 字体家族
Meet the expanded San Francisco font family
2022年6月6日
一句话判断
San Francisco 字体家族在 2022 年迎来了重大扩展——新增了 SF Serif 和可变字体轴(Variable Font Axis),让你的排版精细度直接拉满。
这场 Session 讲了什么
苹果的 San Francisco(简称 SF)字体自 2015 年推出以来一直是苹果平台的系统字体。2022 年,苹果对这个字体家族做了大幅扩展。
新成员:SF Serif。 之前 SF 家族只有无衬线体(Sans Serif),现在加入了衬线体变体。SF Serif 和 SF Sans 共享相同的骨架比例,所以在同一个排版中混用时视觉上非常协调。这给开发者提供了一个”苹果官方的衬线体”选择,不用再引入第三方字体。
可变字体支持(Variable Fonts)。 SF 现在支持 OpenType 的可变字体技术。一个可变字体文件包含了多个轴(axis),比如字重(weight)、字宽(width)、光学尺寸(optical size)。你可以用 UIFont 或 SwiftUI 的 .font() 修饰符在这些轴上选择任意值,而不是局限于预定义的几个字重档位。
动态光学尺寸。 SF 的光学尺寸(Optical Size)功能会根据字号自动调整字母的笔画粗细和间距。大字号下笔画更细、间距更舒展;小字号下笔画加粗、间距更紧凑,以保证可读性。这个行为在系统和 SwiftUI 中是自动的。
新的排版 API。 SwiftUI 和 UIKit 中增加了更多的排版控制 API,比如行间距的精确控制、连字(ligature)的开关、以及数字样式(等宽数字 vs 比例数字)的选择。
值得深挖的点
可变字体是排版精细化的未来。 传统字体是”离散的”——你只能选择 Regular、Medium、Bold 等预定义字重。可变字体让你在 100 到 900 之间选择任意字重值。这对于响应式设计特别有用:在一个从 12pt 到 72pt 的标题系统中,你可以让字重随字号连续变化,而不是在几个档位之间跳变。
SF Serif 的设计意图。 苹果不是”随便做了个衬线体”。SF Serif 的 x-height、字间距和整体灰度都和 SF Sans 匹配,这意味着你可以在正文用 Sans、引言用 Serif,两者的视觉权重是平衡的。这种”系统级协调”是苹果字体设计的一贯理念。
代码片段
import SwiftUI
// 使用可变字体的精细字重
struct VariableFontExample: View {
var body: some View {
Text("Dynamic Weight")
// 不再局限于 .regular, .bold 等
// 使用 system 设计的可变字体
.font(.system(size: 24, weight: .init(rawValue: 350)))
// SF Serif 的使用
Text("Serif Text")
.font(.system(.body, design: .serif))
// 等宽数字(适合表格和数值展示)
Text("$1,234.56")
.font(.system(.body, design: .monospaced)
.monospacedDigit())
// 精细的排版控制
Text("Multi-line text with custom spacing")
.font(.system(.body, design: .default))
.lineSpacing(8)
.tracking(0.5) // 字间距微调
}
}
// UIKit 中的可变字体
let font = UIFont.systemFont(
ofSize: 20,
weight: UIFont.Weight(rawValue: 0.35) // 精细字重
)
// 使用 Serif 设计
let serifFont = UIFont.systemFont(
ofSize: 17,
weight: .regular,
width: UIFont.Width.standard
)
最佳实践
- 优先使用
.system字体而非硬编码的 SF 字体名,这样系统会自动选择合适的变体。 - 在展示数值数据时使用
.monospacedDigit(),防止数字宽度变化导致的列对齐问题。 - 混合使用 Sans 和 Serif 时,保持相同的字重和字号,只改变 design 参数。
- 在小字号(12pt 以下)场景中信任系统的光学尺寸调整,不要手动加粗。
还有什么值得关注
- SF Serif 目前只在苹果平台上可用,如果你需要跨平台一致的排版,还是得用第三方衬线体。
- 可变字体文件的体积比传统字体大,但对于系统内置字体这不构成问题。
- SwiftUI 的
.font()修饰符在 iOS 16 中新增了design参数,支持.default、.serif、.monospaced、.rounded四种变体。 - 苹果在 Human Interface Guidelines 中更新了字体使用建议,新增了 Serif 的推荐使用场景。