ios - 将 HTML 转换为 NSAttributedString 时可以设置默认字体吗?
<p><p>我正在尝试在 UILabel 中显示 HTML,例如</p>
<pre><code>NSString * htmlString = @"Some html string \n <font size=\"13\" color=\"red\">This is some text!</font>";
NSAttributedString * attrStr = [ initWithData: options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
</code></pre>
<p>现在我得到了一个属性字符串</p>
<p>attrStr 的打印说明:
<strong>一些html字符串</strong> </p>
<pre><code>{
...
NSFont = "<UICTFont: 0x7f8240d7c310> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; **font-size: 12.00pt**";
}
</code></pre>
<p>这是一段文字!</p>
<pre><code>{
...
NSFont = "<UICTFont: 0x7f8240d7aff0> font-family: \"Times New Roman\"; font-weight: normal; font-style: normal; **font-size: 37.00pt**";
}
</code></pre>
<p>似乎 <strong>font-size: 12.00pt</strong> 是默认大小,我想在不更改 HTML 源代码的情况下更改大小。该怎么做?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您可以通过一些编码来完成...您需要检查属性并更改属性字符串每个段的字体大小(如普通、斜体、粗体等...)。</p>
<pre><code>extension String {
func htmlAttributedString() -> NSMutableAttributedString {
guard let data = self.data(using: String.Encoding.utf8, allowLossyConversion: false)
else { return NSMutableAttributedString() }
guard let formattedString = try? NSMutableAttributedString(data: data,
options: [.documentType: NSAttributedString.DocumentType.html,
.characterEncoding: String.Encoding.utf8.rawValue],
documentAttributes: nil )
else { return NSMutableAttributedString() }
return formattedString
}
}
extension NSMutableAttributedString {
func with(font: UIFont) -> NSMutableAttributedString {
self.enumerateAttribute(NSAttributedStringKey.font, in: NSMakeRange(0, self.length), options: .longestEffectiveRangeNotRequired, using: { (value, range, stop) in
let originalFont = value as! UIFont
if let newFont = applyTraitsFromFont(originalFont, to: font) {
self.addAttribute(NSAttributedStringKey.font, value: newFont, range: range)
}
})
return self
}
func applyTraitsFromFont(_ f1: UIFont, to f2: UIFont) -> UIFont? {
let originalTrait = f1.fontDescriptor.symbolicTraits
if originalTrait.contains(.traitBold) {
var traits = f2.fontDescriptor.symbolicTraits
traits.insert(.traitBold)
if let fd = f2.fontDescriptor.withSymbolicTraits(traits) {
return UIFont.init(descriptor: fd, size: 0)
}
}
return f2
}
}
</code></pre>
<p>你会这样使用它</p>
<pre><code>let formattedString = "text<b>sometext</b>"
.htmlAttributedString()
.with(font:UIFont(name: "Times New Roman", size: 37)!)
</code></pre></p>
<p style="font-size: 20px;">关于ios - 将 HTML 转换为 NSAttributedString 时可以设置默认字体吗?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/34263767/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/34263767/
</a>
</p>
页:
[1]