为什么iOS13更改了NSAttributedString中<p>段落的字体家族?

6

我的应用程序使用NSAttributedString向用户显示文本。大部分文本都在段落HTML标记(<p>)内。当它在这些标记内部时,字体族被更改为某个Times风格。
这是在新版本iOS 13中发生的问题,之前我们没有遇到过这个问题。

On this image you can see normal font and the modified font when it is in the

tags: https://imgur.com/a/YY3Gdph

We don't know where to start looking for the solution.

let font = UIFont.preferredFont(forTextStyle: .body)
let strDesc: String = "\(explanation)\n"
let newStringDesc = strDesc.replacingOccurrences(of: "</ul>", with: "</ul><br>")

let modifiedString = "<style>body{font-family: '\(font.fontName)'; font-size:\(font.pointSize)px;}</style>\(strDesc)"
guard let data = modifiedString.data(using: .utf8) else { return nil }

let attrString = try NSMutableAttributedString(
    data: data,
    options: [
              NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html,

NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue,
                ],
    documentAttributes: nil
)
attrString.addCustomParagraphSettings(font: font)
attrString.setCustomParagraphFontColor()

let mainAttributedText = NSMutableAttributedString()

mainAttributedText.append(attrString)
mainAttributedText.append(tmpTakenText)
descriptionTextView.attributedText = mainAttributedText

I expect to see standard iOS font.


那么打印什么 fontfont.fontName - Larme
字体族应该使用 font.familyName 而不是 font-family。 - Larme
是的,现在它可以工作了!谢谢 @Larme - Grzegorz Świerad
我认为以前它找不到字体是因为应该是familyName(参数名称是这样说的),默认情况下会放一些SF字体或Helvetica Neue,给你留下它正在工作的印象。现在如果找不到旧金山字体就不返回,这很奇怪。 - Larme
2
这个解决方案似乎可行,但只有在所需字体为常规字体时才有效,因为默认情况下从字体系列返回的就是常规字体。font.fontName应该明确指定所需字体系列中的哪种字体,例如细体、粗体、黑体等。 - Rado
显示剩余2条评论
1个回答

3

@Larme在代码中发现了一个错误。CSS属性font-family的值应该是font.familyName而不是font.fontName


我确认我遇到了同样的问题,CSS不接受fontName并回退到默认字体,但使用familyName可以解决。 - AleGiovane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接