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

