在 SwiftUI 中,选择合适的字体大小需要兼顾 可读性 、设计规范 和 多设备适配。以下是系统化的字体选择指南,涵盖标准字体样式、动态类型支持以及自定义方法:
一、使用系统预设字体样式(推荐)
SwiftUI 提供了与 Apple 设计规范一致的预设字体样式,自动适配不同设备和动态类型(Dynamic Type)设置:
swift
Text("标题")
.font(.largeTitle) // 最大标题(34pt @ 常规尺寸)
.font(.title) // 标题(28pt)
.font(.title2) // 次级标题(22pt)
.font(.title3) // 小标题(20pt)
.font(.headline) // 强调文本(半粗体,17pt)
.font(.body) // 正文(默认,17pt)
.font(.callout) // 注释文本(16pt)
.font(.subheadline) // 副标题(15pt)
.font(.footnote) // 脚注(13pt)
.font(.caption) // 标注(12pt)
.font(.caption2) // 更小的标注(11pt)
优点:
- 自动响应动态类型:用户调整系统字体大小时自动缩放。
- 跨设备适配:在不同设备(iPhone/iPad/Mac)上表现一致。
- 符合人机交互指南:字号和字重经过Apple优化。
二、自定义固定字号(需谨慎)
如需精确控制,可使用 .font(.system(size:weight:design:))
:
swift
Text("自定义字体")
.font(.system(size: 24, weight: .bold, design: .rounded))
参数说明:
参数 | 可选值示例 | 说明 |
---|---|---|
size |
16 , 24 |
字号(磅值) |
weight |
.regular , .bold , .medium |
字重(粗细) |
design |
.default , .rounded , .serif |
字体风格 |
注意事项:
- 慎用固定字号:可能破坏动态类型适配,导致文本截断或可读性问题。
- 最小字号建议:正文不小于 16pt(满足无障碍标准)。
三、响应动态类型(关键技巧)
通过 .scaledToFit()
或 @ScaledMetric
让自定义字体随系统设置缩放:
方法1:相对缩放
swift
Text("自适应文本")
.font(.custom("Helvetica", size: 16)) // 基础字号
.scaledToFit() // 允许随动态类型缩放
方法2:动态计算字号
swift
@ScaledMetric(relativeTo: .body) var fontSize: CGFloat = 16
Text("动态字号: \(fontSize)")
.font(.system(size: fontSize))
四、字号选择实践建议
1. 通用场景参考
元素类型 | 推荐样式 | 等效字号(常规模式) |
---|---|---|
主标题 | .largeTitle |
34pt |
按钮文字 | .headline |
17pt(半粗体) |
正文段落 | .body |
17pt |
辅助说明文字 | .footnote |
13pt |
2. 无障碍设计
- 重要内容:确保字号 ≥ 16pt(低视力用户可读)。
- 测试方法 :在设备设置中启用 最大动态类型(设置 → 辅助功能 → 显示与文字大小),检查布局是否正常。
3. 多设备适配
- iPad/Mac:相同样式下实际显示比 iPhone 更大(因屏幕视距更远)。
- TV/watchOS:需使用更大字号(参考各平台设计规范)。
五、高级技巧:自定义字体家族
swift
// 1. 将字体文件加入项目
// 2. 在 Info.plist 中注册字体
// 3. 使用自定义字体
Text("自定义字体")
.font(.custom("YourFontName", size: 20, relativeTo: .body)) // 保持动态类型支持
六、调试工具
-
Xcode 画布:按住 ⌥ 键点击预览,检查字体度量。
-
动态类型测试 :
swift.environment(\.sizeCategory, .accessibilityExtraExtraLarge)
总结
- 优先使用系统预设样式 (如
.body
,.headline
)。 - 固定字号需配合动态类型适配 (
.scaledToFit()
或@ScaledMetric
)。 - 无障碍设计:确保最小可读字号,测试极端动态类型设置。
通过系统字体样式 + 动态类型支持,可以构建既美观又包容的 SwiftUI 应用!