Как отображать ссылки и изображения из строки HTML - PullRequest
0 голосов
/ 05 июля 2019

У меня есть строка, содержащая код HTML.Каков наилучший способ отобразить это (он содержит изображения), также я хочу сделать ссылки в этом tappable (открыть в Safari)

Я пробовал расширение String, которое дает мне NSAttributedString от HTML, но изображение отображается только частично, и ссылки не могут быть вставлены.

let text = htmlString.attributedString(withRegularFont: UIFont.systemFont(ofSize: 14), andBoldFont: UIFont.systemFont(ofSize: 16))

extension String {

    func attributedString(withRegularFont regularFont: UIFont, andBoldFont boldFont: UIFont, textColor: UIColor = UIColor.gray) -> NSMutableAttributedString {
        var attributedString = NSMutableAttributedString()
        guard let data = self.data(using: .utf8) else { return NSMutableAttributedString() }
        do {
            attributedString = try NSMutableAttributedString(data: data,
            options: [.documentType: NSAttributedString.DocumentType.html,
            .characterEncoding:String.Encoding.utf8.rawValue],
            documentAttributes: nil)
            let range = NSRange(location: 0, length: attributedString.length)
            attributedString.enumerateAttribute(NSAttributedString.Key.font, in: range, options: .longestEffectiveRangeNotRequired) { value, range, _ in
            let currentFont: UIFont = value as! UIFont
            var replacementFont: UIFont? = nil

            if currentFont.fontName.contains("bold") || currentFont.fontName.contains("Semibold") {
                replacementFont = boldFont
            } else {
                replacementFont = regularFont
            }

            let replacementAttribute = [NSAttributedString.Key.font:replacementFont!, NSAttributedString.Key.foregroundColor: textColor]
            attributedString.addAttributes(replacementAttribute, range: range)
        } catch let e {
            print(e.localizedDescription)
        }
        return attributedString
    }
}

Он показывает HTML внутри UILabel, но я не могу нажать на ссылки, и изображения обрезаются соответственнона ширину устройства.

1 Ответ

2 голосов
/ 05 июля 2019

Я думаю, что лучший вариант - сохранить эту HTML-строку в виде файла, а затем загрузить этот файл с помощью веб-представления. отметьте вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...