Рендеринг HTML на UITableViewCell в iOS - PullRequest
0 голосов
/ 22 декабря 2018

Мне нужно отрендерить HTML, в котором могут быть изображения, текст в разных ячейках UITableView.Мой источник данных содержит HTML-контент, который мне, скорее всего, нужно отобразить на UITableViewCell.

Я также пробовал строку Attributed на UILabel и UITextView, но они также плохо работают при прокруткеUITableView Я попробовал это, но не смог получить помощь с различными типами клеток.

Я также пытался https://github.com/Vugla/PSHTMLView,, но у него есть проблемы, например, он помогает в исключении из очереди только похожих ячеек (мне нужно иметь ячейки с другим html)

Любая помощь будет мне очень признательна.Также будут полезны указатели:)

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Я сталкивался с подобными случаями использования и всегда испытывал боль.Таким образом, я могу думать в основном о двух вариантах:

  1. Использование доступных собственных API.

Вы преобразуете HTML в приписанную строку, как эта(см. Преобразование HTML в NSAttributedString в iOS ):

let htmlData = NSString(string: details).data(using: String.Encoding.unicode.rawValue)
let options = [NSAttributedString.DocumentReadingOptionKey.documentType:
    NSAttributedString.DocumentType.html]
let attributedString = try? NSAttributedString(data: htmlData ?? Data(),
                                                      options: options,
                                                      documentAttributes: nil)

Однако это медленно и при использовании в сочетании с UITableViewCell может привести к непредсказуемым сбоям.Я предполагаю, что причина в том, что собственный анализатор HTML должен загрузить WebKit и проанализировать HTML в фоновом потоке или очереди, что не очень хорошо работает с линией конвейера рендеринга UITableViewCell.Итак, если вы пойдете по этому пути, я предлагаю предварительно обработать HTML (и кэшировать его) и позволить UITableViewCell использовать приписанные строки в качестве источника данных.

Используйте сторонние библиотеки.

DTCoreText (https://github.com/Cocoanetics/DTCoreText), кажется, решает эту проблему, но вы должны знать о лицензировании.

Если вы хотите просто удалить теги HTML, вы можете использовать это расширение от Google https://chromium.googlesource.com/external/github.com/google/google-toolbox-for-mac/+/refs/heads/master/Foundation/GTMNSString+HTML.h

0 голосов
/ 22 декабря 2018

Add these constraints with height Добавьте constarint к вашему, можно использовать UITextView, просто добавьте одно ограничение, т.е. ограничение по высоте с тертой и равной свойству и измените константу на 999и используйте следующий код в ячейке.

self.heightUITextView.constant = self.newStoryTextView.contentSize.height/2

Здесь heightUITextView - мое ограничение высоты, а newStoryTextView - мой UITextView

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! YourTableViewCell

            cell.heightUITextView.constant = self.newStoryTextView.contentSize.height/2
            cell.view.setNeedsLayout()
            return cell
    }

Ваш TableCell:

class YourTableViewCell : UITableViewCell {

    @IBOutlet weak var viewHeight: NSLayoutConstraint!

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