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

iOS17+Xcode15中UIFontMetrics对自定义字体失效问题

问题分析与解决

你代码里的问题出在初始化自定义字体时用了固定的UIFont.systemFontSize,这个值是系统默认字体的固定大小,不会随传入的UIFont.TextStyle变化,导致后续UIFontMetrics缩放没有基于对应文本样式的基准尺寸,所以不管传什么样式,最终字体大小都一致。

修正方法是先获取对应文本样式的系统字体基准大小,再用这个大小初始化自定义字体,最后通过UIFontMetrics适配动态字体:

static func getHeaderFont(forStyle style: UIFont.TextStyle) -> UIFont {
    // 获取对应样式的系统字体基准大小
    let baseSize = UIFont.preferredFont(forTextStyle: style).pointSize
    guard let font = UIFont(name: "Montserrat-SemiBold", size: baseSize) else { 
        fatalError("Montserrat-SemiBold 字体未找到,请确认已添加到项目并在Info.plist中声明") 
    }
    return UIFontMetrics(forTextStyle: style).scaledFont(for: font)
}

额外确认事项:

  • 自定义字体Montserrat-SemiBold已正确添加到项目资源目录中
  • 在Info.plist的Fonts provided by application字段里,已正确声明该字体的完整文件名(例如Montserrat-SemiBold.ttf)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:59:51