HTML форматирование не работает с UILabel в Swift - PullRequest
1 голос
/ 17 мая 2019

Я использовал этот код для форматирования содержимого HTML на UILabel

 var htmlToAttributedString: NSAttributedString? {
    do {
        guard let data = data(using: String.Encoding.utf8) else {
            return nil
        }
        return try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
    } catch {
        print("error: ", error)
        return nil
    }
}

Мой HTML контент Нравится:

("<p>My Name is <b>Ayush</b> <I>Bansal</I></p>")

Когда я использовал приведенный выше код для форматирования, я получаю вывод вроде (Меня зовут Аюш Бансал). Но я хочу, чтобы мои результаты были такими (Меня зовут Аюш Бансал )

1 Ответ

0 голосов
/ 17 мая 2019

вы можете использовать это расширение

extension String {
    func convertToAttributed(_ defaultFont: UIFont, textColor: UIColor ) -> NSAttributedString? {
        guard let data = "".replacingOccurrences(of: "\n", with: "<br>").data(using: .utf8, allowLossyConversion: false) else { return nil }
        guard let attributedString = try? NSMutableAttributedString(data: data,
                                                                    options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html],
                                                                    documentAttributes: nil)
            else { return nil }

        attributedString.enumerateAttribute(NSAttributedString.Key.font,
                                            in: NSRange(location: 0, length: attributedString.length),
                                            options: NSAttributedString.EnumerationOptions(rawValue: 0))
        { (value, range, _) -> Void in
            if let oldFont = value as? UIFont {
                var newFont = defaultFont
                let isBold = oldFont.fontName.lowercased().contains("bold")
                let isItalic = oldFont.fontName.lowercased().contains("italic")
                if isBold && isItalic {
                    newFont = UIFont.bolditalicFont(ofSize: 14)
                } else if isBold {
                    newFont = UIFont.boldFont(ofSize: 14)
                } else if isItalic {
                    newFont = UIFont.italicFont(ofSize: 14)
                }
                attributedString.removeAttribute(NSAttributedString.Key.font, range: range)
                attributedString.addAttribute(NSAttributedString.Key.font, value: newFont, range: range)
                attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: textColor, range: range)  
            }
        }
    }
}

использование:

yourLabel.attributedText = string.convertToAttributed(font, textColor: textcolor)
...