У меня есть следующее расширение для преобразования ответа API в формате html в NSAttributedString, стилизованного с CSS:
extension String {
public func convertHtmlToAttributedStringWithCSS(bodyFont: UIFont, h1Font: UIFont, csscolor: String, lineheight: Int, csstextalign: String) -> NSAttributedString? {
let modifiedString =
"<style>" +
"body{" +
"font-family: '\(bodyFont.fontName)'; " +
"font-size:\(bodyFont.pointSize)px; " +
"color: \(csscolor); " +
"line-height: \(lineheight)px; " +
"text-align: \(csstextalign); " +
"} " +
"h1{" +
"font-family: '\(h1Font.fontName)'; " +
"font-size:\(h1Font.pointSize)px; " +
"}" +
"</style>\(self)";
guard let data = modifiedString.data(using: .utf8) else {
return nil
}
do {
return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
}
catch {
print(error)
return nil
}
}
}
Я называю это так:
self.CampaignDescriptionBody.attributedText = briefing!.convertHtmlToAttributedStringWithCSS(bodyFont: UIFont.systemFont(ofSize: 12), h1Font: UIFont.systemFont(ofSize: 15), csscolor: "grey", lineheight: 5, csstextalign: "left")
Размер шрифта, выравнивание текста и т. Д. c работает нормально. Моя проблема в том, что шрифт на экране совсем не похож на системный шрифт, который сейчас кажется Сан-Франциско.
Вот скриншот с 2 метками UILabels, которые расположены рядом друг с другом на экране. «Campaign Description» установлено в «System Bold 15» в Интерфейсном Разработчике «Exklusivität» - это часть ответа API, которая превращается в NSAttributedString, поэтому она должна отображаться с тем же шрифтом, но, очевидно, нет.
Кто-нибудь знает, что я здесь не так делаю?