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

SwiftUI是否支持类似Web的Variable Fonts实现字体权重缩放?

Swift/SwiftUI 可变字体(Variable Fonts)支持方案

SwiftUI 从 iOS 13、macOS 10.15 版本开始就支持可变字体(对应Web端的Variable Fonts),完全可以实现单个字体文件覆盖任意权重、字宽等变体的需求,不用再为每个字重单独嵌入字体文件。

问题根源

你之前的实现用的是固定字重的字体文件(比如MyFont-Regular、MyFont-Bold),这类文件只包含单一权重的字形,所以调用.fontWeight(.bold)不会生效——系统没法从固定权重的字体里生成其他权重的样式。

正确实现步骤

  1. 确保你的字体是可变字体
    可变字体文件会包含多个可变轴(比如Weight、Width、Italic等),可以用系统自带的Font Book打开字体文件,查看是否有权重调节的滑块来验证。

  2. 导入并配置字体

    • 将可变字体文件添加到项目中,确保勾选对应的Target;
    • 在Info.plist里添加Fonts provided by application字段,填入字体的完整文件名(比如MyFont-VF.ttf)。
  3. 修改自定义字体函数
    直接使用字体的家族名(不是带权重后缀的文件名)来初始化自定义字体:

    func myFont(size: CGFloat) -> some View {
        font(.custom("MyFont", size: size)) // 这里用可变字体的家族名
    }
    
  4. 使用任意权重调节
    现在就可以按你期望的方式链式调用.fontWeight(),甚至支持非预设的权重数值:

    // 预设权重
    Text("Text")
        .myFont(size: 20)
        .fontWeight(.bold)
    
    // 自定义权重数值(0-1000,需字体支持)
    Text("Custom Weight")
        .font(Font.custom("MyFont", size: 20, weight: .init(rawValue: 600)))
    

常见问题排查

如果按上述步骤操作后仍未达到预期(比如你补充的图片中权重无变化),可以检查:

  • 字体文件确实是可变字体,而非多个固定权重字体的集合;
  • Info.plist中的字体文件名拼写完全正确;
  • 字体文件已正确添加到Target的Copy Bundle Resources中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:43:32