SwiftUI中字体大小的选择

在 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)) // 保持动态类型支持

六、调试工具

  1. Xcode 画布:按住 ⌥ 键点击预览,检查字体度量。

  2. 动态类型测试

    swift 复制代码
    .environment(\.sizeCategory, .accessibilityExtraExtraLarge)

总结

  • 优先使用系统预设样式 (如 .body, .headline)。
  • 固定字号需配合动态类型适配.scaledToFit()@ScaledMetric)。
  • 无障碍设计:确保最小可读字号,测试极端动态类型设置。

通过系统字体样式 + 动态类型支持,可以构建既美观又包容的 SwiftUI 应用!

相关推荐
蓝婷儿5 小时前
前端面试每日三题 - Day 32
前端·面试·职场和发展
星空寻流年6 小时前
CSS3(BFC)
前端·microsoft·css3
九月TTS6 小时前
开源分享:TTS-Web-Vue系列:Vue3实现固定顶部与吸顶模式组件
前端·vue.js·开源
CodeCraft Studio6 小时前
数据透视表控件DHTMLX Pivot v2.1发布,新增HTML 模板、增强样式等多个功能
前端·javascript·ui·甘特图
一把年纪学编程6 小时前
【牛马技巧】word统计每一段的字数接近“字数统计”
前端·数据库·word
llc的足迹6 小时前
el-menu 折叠后小箭头不会消失
前端·javascript·vue.js
九月TTS7 小时前
TTS-Web-Vue系列:移动端侧边栏与响应式布局深度优化
前端·javascript·vue.js
Johnstons7 小时前
AnaTraf:深度解析网络性能分析(NPM)
前端·网络·安全·web安全·npm·网络流量监控·网络流量分析
whatever who cares7 小时前
CSS3 伪元素(Pseudo-elements)大全
前端·css·css3
若愚67927 小时前
前端取经路——性能优化:唐僧的九道心经
前端·性能优化