在WKWebView中使用自定义本地字体

Per*_*tra 1 css fonts ios swift wkwebview

我正在尝试在中显示的某些动态HTML的CSS中使用本地字体(与应用程序一起安装的一种字体)WKWebView。我已经阅读了许多Stack Overflow帖子和此网页。回顾我所做的事情:

字体(在本例中为ImpactLTStd.otf)是iOS应用程序的一部分。

它是在“应用程序提供字体”部分的应用程序plist中输入的。

根据所引用的网页,我可以确认Build PhasesImpactLTStd.otfCopy Bundle Resources部分中列出了,并使我相信正确地将捆绑了该应用程序。ImpactLTStd.otf

字体在CSS中列出为:

<style> @font-face {font-family: 'Impact LT Std'; src: local('Impact LT Std'), local('ImpactLTStd'), url('ImpactLTStd.otf'); format('opentype'); } </style>
Run Code Online (Sandbox Code Playgroud)

我以这种方式用两种不同的方式引用字体(一种是按字体系列,另一种是按字体名称,以查看哪种有效,而两种无效):

<style>  .box_root {    overflow: auto;    background-color: #000000;    padding-top: 1.5em;    padding-bottom: 1.5em;    padding-left: 1.5em;    max-width: 1440px;    max-height: 640px;    display: table;  }  .box_title {    color: #ffd300;    line-height: 1em;    font-size: 85pt;    font-size: 6vw;    font-family: 'Impact LT Std';    text-transform: uppercase;  }  .box_description {    padding-top: .5em;    line-height: 1em;    color: #ffffff;    font-size: 65pt;    font-size: 4vw;    font-weight: bold;    font-family: 'ImpactLTStd';  } 
Run Code Online (Sandbox Code Playgroud)

我将HTML加载到WKWebViewusing中loadHTMLString

webView.loadHTMLString(getHtml(), baseURL: nil)
Run Code Online (Sandbox Code Playgroud)

但是,WKWebView使用CSS标记显示的HTML文本不使用Impact字体,而是使用一些类似于Times New Roman的默认字体。

有人知道我错误地做了什么步骤吗?

Tam*_*gel 6

加载HTML字符串时未提供基本URL,这将导致字体无法加载。尝试访问包的主要资源路径,如下所示:

if let resourcePath = Bundle.main.resourcePath {
    let url = URL.init(fileURLWithPath: resourcePath)
    webView.loadHTMLString(getHtml(), baseURL: url)
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我们还有其他需要基础URL的内容要加载怎么办(例如视频)。如何同时提供基础URL和资源路径? (2认同)