我正在使用WKWebView呈现一些本地HTML。我使用WKNavigationDelegate的webView(_ webView:WKWebView,didFinish导航:WKNavigation!){}方法来声明我制作的包含布局更新的JS字符串。
我通过一个中间对象提供了此字符串,该对象从应用程序中的自定义标签获取布局参数。
一切都很好,但是花哨的:当我向混合中添加自定义字体(或任何本机字体)时,所有内容都会崩溃。
我尝试将以下所示的字符串添加到字符串中。但是,我的HTML经验非常有限,我可能会盯着一些非常明显的问题。看起来像这样;
{ font-family: 'SOME_FONT';src: local('SOME_FONT'),url('SOME_FONT.otf') format('opentype'); ...rest of the values}
我尝试使用@font-face;
我尝试在getCSSStringVariables返回字符串的开头提供此代码:
任何人都可以向我解释如何执行此操作,而无需在实际HTML的标题中提供样式。 这是一个类,用于创建由WKWebView评估的请求的js字符串
open class CSSLayoutObject {
typealias Label = UILabel
typealias FontFamily_FontName_Size_LineHeight_Color = (String, String, CGFloat, CGFloat, String)
public func body<Label: UILabel>(label : Label? = nil) -> String {
let cssString = "body \(getCSSStringVariables(label: label))"
let jsString = "var style = document.createElement('style'); style.innerHTML = '\(cssString)'; document.head.appendChild(style);"
return jsString
}
public func paragraph<Label: UILabel>(label : Label? = nil) -> String {
let cssString = "paragraph \(getCSSStringVariables(label: label))"
let jsString = "var style = document.createElement('style'); style.innerHTML = '\(cssString)'; document.head.appendChild(style);"
return jsString
}
private func getCSSStringVariables(label : Label?) -> String {
let label = (label == nil ? UILabelBody() : label)!
let (fontFamily, fontName, size, height, color ) = getLabelStyling(label)
return "{ font-size: \(size)px; color: #\(color); }" // < ------ THIS IS THE STRING IN QUESTION
}
private func getLabelStyling(_ label : Label) -> FontFamily_FontName_Size_LineHeight_Color {
var font = label.font!
font = UIFont(name: "OpenSans-Semibold", size: 60)!
let fontFamily = font.familyName
let fontName = font.fontName
let fontSize = font.pointSize
let fontLineHeight = font.lineHeight
var fontColor = label.textColor!
fontColor = UIColor.yellow
return (fontFamily, fontName, fontSize, fontLineHeight, fontColor.toHex()!)
}
}
只要我不提及该变量:font-family就可以了