自定义字体在 WKWebView 中不起作用 Swift
Custom Font Not Working in WKWebView Swift
尝试在 WKWebView 中使用自定义字体,但没有成功。
let htmlString = "<span style=\"font-family: 'OpenSans-Bold'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>"
webView.loadHTMLString(htmlString, baseURL: nil)
我可以使用 HelveticaNeue-Bold 并且效果很好,但不适用于上面的自定义字体。
let htmlString = "<span style=\"font-family: 'HelveticaNeue'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>"
webView.loadHTMLString(htmlString, baseURL: nil)
我添加了自定义字体 properly.See 截图。
有人可以告诉我如何实现这一目标或为我指明正确的方向。
正在阅读 DonMag 评论中 the linked thread 中的答案:
必须使用 @font-face
您需要多个 @font-face
声明才能将多个字体文件用作单个字体系列
您需要提供 baseURL
才能使 url(OpenSans-Regular.ttf)
这样的相对 URL 起作用
所以,试试这个:
let htmlString = """
<style>
@font-face
{
font-family: 'Open Sans';
font-weight: normal;
src: url(OpenSans-Regular.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: bold;
src: url(OpenSans-Bold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 900;
src: url(OpenSans-ExtraBold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 200;
src: url(OpenSans-Light.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 500;
src: url(OpenSans-Semibold.ttf);
}
</style>
<span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span>
"""
webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL) //<-
或者如果您愿意,可以使用单独的 css 文件:
let htmlString = """
<link rel="stylesheet" type="text/css" href="open-sans.css">
<span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span>
"""
webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL)
open-sans.css:
@font-face
{
font-family: 'Open Sans';
font-weight: normal;
src: url(OpenSans-Regular.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: bold;
src: url(OpenSans-Bold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 900;
src: url(OpenSans-ExtraBold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 200;
src: url(OpenSans-Light.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 500;
src: url(OpenSans-Semibold.ttf);
}
class StaticContentViewControlle: WKUIDelegate, WKNavigationDelegate {
@IBOutlet weak var webViewContainer: UIView!
private var webView: WKWebView?
var url = ""
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
func initialSetup() {
url = "https://www.apple.com"
let myURL = URL(string: url)
if let myURL = myURL {
let myRequest = URLRequest(url: myURL)
webView?.uiDelegate = self
webView?.load(myRequest)
}
webView?.navigationDelegate = self
webView?.scrollView.showsVerticalScrollIndicator = false
webView?.scrollView.backgroundColor = .clear
webView?.isOpaque = false
webView?.backgroundColor = .clear
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("Start loading")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("End loading")
let textSize = 300
let javascript = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%'"
webView.evaluateJavaScript(javascript) { (response, error) in
print()
}
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
decisionHandler(.cancel)
} else {
print("Open it locally")
decisionHandler(.allow)
}
} else {
print("not a user click")
decisionHandler(.allow)
}
}
}
尝试在 WKWebView 中使用自定义字体,但没有成功。
let htmlString = "<span style=\"font-family: 'OpenSans-Bold'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>"
webView.loadHTMLString(htmlString, baseURL: nil)
我可以使用 HelveticaNeue-Bold 并且效果很好,但不适用于上面的自定义字体。
let htmlString = "<span style=\"font-family: 'HelveticaNeue'; font-size: 30; color: white\">\(Utils.aboutUsText)</span>"
webView.loadHTMLString(htmlString, baseURL: nil)
我添加了自定义字体 properly.See 截图。
有人可以告诉我如何实现这一目标或为我指明正确的方向。
正在阅读 DonMag 评论中 the linked thread 中的答案:
必须使用
@font-face
您需要多个
@font-face
声明才能将多个字体文件用作单个字体系列您需要提供
baseURL
才能使url(OpenSans-Regular.ttf)
这样的相对 URL 起作用
所以,试试这个:
let htmlString = """
<style>
@font-face
{
font-family: 'Open Sans';
font-weight: normal;
src: url(OpenSans-Regular.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: bold;
src: url(OpenSans-Bold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 900;
src: url(OpenSans-ExtraBold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 200;
src: url(OpenSans-Light.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 500;
src: url(OpenSans-Semibold.ttf);
}
</style>
<span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span>
"""
webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL) //<-
或者如果您愿意,可以使用单独的 css 文件:
let htmlString = """
<link rel="stylesheet" type="text/css" href="open-sans.css">
<span style="font-family: 'Open Sans'; font-weight: bold; font-size: 30; color: red">(Utils.aboutUsText)</span>
"""
webView.loadHTMLString(htmlString, baseURL: Bundle.main.bundleURL)
open-sans.css:
@font-face
{
font-family: 'Open Sans';
font-weight: normal;
src: url(OpenSans-Regular.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: bold;
src: url(OpenSans-Bold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 900;
src: url(OpenSans-ExtraBold.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 200;
src: url(OpenSans-Light.ttf);
}
@font-face
{
font-family: 'Open Sans';
font-weight: 500;
src: url(OpenSans-Semibold.ttf);
}
class StaticContentViewControlle: WKUIDelegate, WKNavigationDelegate {
@IBOutlet weak var webViewContainer: UIView!
private var webView: WKWebView?
var url = ""
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
func initialSetup() {
url = "https://www.apple.com"
let myURL = URL(string: url)
if let myURL = myURL {
let myRequest = URLRequest(url: myURL)
webView?.uiDelegate = self
webView?.load(myRequest)
}
webView?.navigationDelegate = self
webView?.scrollView.showsVerticalScrollIndicator = false
webView?.scrollView.backgroundColor = .clear
webView?.isOpaque = false
webView?.backgroundColor = .clear
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("Start loading")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("End loading")
let textSize = 300
let javascript = "document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '\(textSize)%'"
webView.evaluateJavaScript(javascript) { (response, error) in
print()
}
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if navigationAction.navigationType == .linkActivated {
if let url = navigationAction.request.url,
UIApplication.shared.canOpenURL(url) {
UIApplication.shared.open(url)
decisionHandler(.cancel)
} else {
print("Open it locally")
decisionHandler(.allow)
}
} else {
print("not a user click")
decisionHandler(.allow)
}
}
}