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

Swift中WKWebView自定义字体无法生效问题求助

解决WKWebView自定义字体不生效的问题

我之前也碰到过一模一样的情况,WKWebView加载本地自定义字体确实有几个容易踩的小坑,咱们一步步来排查解决:

1. 确认字体文件已正确配置到项目

  • 先检查你的OpenSans-Bold.ttf字体文件是不是真的添加到Xcode项目里了,一定要确保勾选了对应的Target——可以在添加文件时的弹窗里确认,或者选中字体文件后,在右侧文件检查器的「Target Membership」里打勾。
  • 必须在项目的Info.plist中添加Fonts provided by application字段(数组类型),把字体的完整文件名(比如OpenSans-Bold.ttf)添加进去,这一步是系统识别自定义字体的关键,漏了肯定用不了。

2. 验证字体的实际名称(最容易踩坑的点!)

很多时候文件名和字体的实际名称不一样!比如文件名叫OpenSans-Bold.ttf,但字体内部的名称可能是Open Sans Bold(带空格)或者其他格式。你可以在App启动时打印所有可用字体,找到OpenSans对应的准确名称:

for family in UIFont.familyNames.sorted() {
    let fontNames = UIFont.fontNames(forFamilyName: family)
    print("字体家族: \(family) → 可用字体: \(fontNames)")
}

运行后在控制台找OpenSans相关的输出,比如可能看到字体家族: Open Sans → 可用字体: ["OpenSans-Bold", ...],那你在HTML里必须用这个准确的名称,不能凭文件名瞎猜。

3. 给WKWebView设置正确的baseURL

当调用loadHTMLString时,如果baseURL设为nil,WKWebView可能无法访问本地的字体资源。你可以把baseURL设为项目的bundle路径,让WebView能找到本地字体:

let htmlString = "<span style=\"font-family: 'OpenSans-Bold'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>"
if let bundleURL = Bundle.main.bundleURL {
    webView.loadHTMLString(htmlString, baseURL: bundleURL)
}

4. 用CSS @font-face显式声明字体(兜底方案)

如果上面的步骤都没用,试试在HTML里用CSS显式引入字体,这样能强制WebView加载指定的字体文件:

let fontCSS = """
@font-face {
    font-family: 'OpenSans-Bold';
    src: url('OpenSans-Bold.ttf') format('truetype');
}
"""
let htmlString = """
<html>
<head>
<style>\(fontCSS)</style>
</head>
<body>
<span style=\"font-family: 'OpenSans-Bold'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>
</body>
</html>
"""
if let bundleURL = Bundle.main.bundleURL {
    webView.loadHTMLString(htmlString, baseURL: bundleURL)
}

按这个顺序试下来,大概率能解决问题——我之前就是栽在字体名称不对的坑里,明明文件名是OpenSans-Bold,实际字体名称却是Open Sans Bold!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:06