我有一个字符串扩展名,可以将HTML转换为NSAttributedString,但是我会在格式化之前将自己的自定义字体添加到API中,然后按以下方式进行格式化。
let testString = "<span style="font-family: MuseoSans-900"> This is an html String <i> with italics </i> and a custom font </span>"
guard let htmlData = testString.data(using: .utf8) else { return nil }
do {
let attrString = try NSAttributedString(data: htmlData, options: [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: String.Encoding.utf8.rawValue,
], documentAttributes: nil)
let formattedHTMLString = NSMutableAttributedString(attributedString: HTMLString)
formattedHTMLString.beginEditing()
formattedHTMLString.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, formattedHTMLString.length), options: []){
(_ value: Any?, _ range: NSRange, _ stop: UnsafeMutablePointer) -> Void in
if value != nil {
var oldFont = value as? UIFont
print("\(oldFont?.fontName)")
}
}
return formattedHTMLString
} catch let error as NSError {
print(error.localizedDescription)
return nil
}
在iOS 10上&lt;返回属性字符串,整个字符串具有相同的字体(在本例中为MuseoSans-900),包括html字符串的italized部分,但在iOS 11上它更新并将字体更改为MuseoSans-300,用于html的斜体部分字符串并在转换为NSAttributed字符串期间保留字符串MuseoSans-900的其余部分。我不知道为什么会发生这种情况,我们将非常感谢任何帮助。