HTML строка с атрибутами в Swift iOS - PullRequest
0 голосов
/ 10 июля 2020

У меня есть текст HTML, поступающий из API, и я хотел показать это в UILabel с использованием Swift.

Play million of songs ad-free across all your devices.* Terms and conditions applied.<br><br><small>* Requires a subscription</small>

Эта строка, поступающая из API, имеет шрифт Times New Roman. Но я хочу, чтобы вся эта строка была написана специальным шрифтом с размером 20, а текст под <small>* Requires a subscription</small> был того же настраиваемого шрифта с другим размером 10.

Есть ли способ попробовать применять разные размеры шрифта только к тегу <small>? Я пробовал разные подходы, но в итоге применил стиль ко всему тексту.

Спасибо !!!

1 Ответ

0 голосов
/ 10 июля 2020

Сначала инициализируйте новую изменяемую строку с атрибутами из ваших html данных:

extension NSAttributedString {
    convenience init(data: Data, documentType: DocumentType, encoding: String.Encoding = .utf8) throws {
        try self.init(attributedString: .init(data: data, options: [.documentType: documentType, .characterEncoding: encoding.rawValue], documentAttributes: nil))
    }
}
let html = """
Play million of songs ad-free across all your devices.* Terms and conditions applied.<br><br><small>* Requires a subscription</small>
"""
do {
    let attrStr = try NSMutableAttributedString(data: Data(html.utf8), documentType: .html)

} catch {
    print(error)
}

затем перечислите атрибуты в вашей строке и проверьте, маленький ли размер шрифта (10), если маленький, установите шрифт на желаемый тип и его размер на 10, в противном случае 20:

attrStr.enumerateAttributes(in: .init(location: 0, length: attrStr.length)) { dict, range, stop in
    var attributes = dict
    if let font = attributes[.font] as? UIFont {
        attributes[.font] = UIFont(name: "Helvetica", size: font.pointSize == 10 ? 10 : 20)
        attrStr.setAttributes(attributes, range: range)
        print((attrStr.string as NSString).substring(with: range))
        print("fontName", font.fontName)
        print("pointSize", font.pointSize)
    }
    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...