You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI 如何设置支持iOS15动态类型的自定义大小系统字体

问题1:custom API指定系统字体的相关说明

你可以通过传入系统字体名称的方式使用custom(_:size:relativeTo:)调用系统字体:

  • iOS 15和macOS Monterey默认的无衬线系统字体官方名称为SF Pro,等宽系统字体为SF Mono,紧凑场景使用的无衬线字体为SF Compact。
  • 不推荐使用该方案调用系统字体:手动硬编码字体名称存在后续系统迭代变更名称导致的兼容风险,同时也无法直接便捷指定字重、字体设计(比如圆角/等宽/衬线变体)等参数,使用成本高于原生系统字体API。

问题2:自定义大小系统字体支持动态类型的最优方案

iOS 15+ 原生提供了系统字体的相对尺寸API,完全匹配你的需求,不需要借助custom API,语法如下:

static func system(size: CGFloat, weight: Font.Weight = .regular, design: Font.Design = .default, relativeTo textStyle: Font.TextStyle) -> Font

你之前失败的写法只需要补充relativeTo参数绑定对应的动态类型样式即可正常适配系统文本大小调整,示例代码:

Text("hello")
    // 绑定到.body样式的缩放规则,默认字号14、加粗
    .font(.system(size: 14, weight: .bold, design: .default, relativeTo: .body))

如果需要频繁复用该字体样式,可以扩展Font做自定义封装:

extension Font {
    /// 自定义加粗正文字体,默认14号,跟随body样式动态缩放
    static let customBoldBody = Font.system(size: 14, weight: .bold, relativeTo: .body)
}

// 调用示例
Text("hello")
    .font(.customBoldBody)

如果需要更精细的缩放控制,也可以桥接UIKit的UIFontMetrics生成对应字体,不过上述原生SwiftUI API已经能覆盖绝大多数场景的需求。


内容的提问来源于stack exchange,提问作者user1046037

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:57:01