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
相关产品推荐
相关产品推荐

