Прокрутка UITableView не гладкая при обновлении attributeText UITextView в UITableViewCell - PullRequest
2 голосов
/ 08 января 2020

У меня есть ViewController, у которого есть UITableView, а у таблицы есть много ячеек с UITextView.

class FeatureCell: UITableViewCell {
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var featureNameTextView: UITextView!
}

class ReviewViewController: UIViewController, UITableViewDataSource {
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let entity = tableViewData[indexPath.row]

        let cell: FeatureCell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier, forIndexPath: indexPath) as! FeatureCell

        let featureNameAttributedString = "<p>Actual HTML String</p>".getAttributedTextOfHTMLString(WithParagraphStyle: nil, font: Theme.textStyle.sfProTextRegular, textColor: .darkGray)
        cell.featureNameTextView.attributedText = featureNameAttributedString
        return cell
    }
}

FeatureNameAttributedString генерируется из строки HTML, которая поступает из API. Я использовал расширение ниже, чтобы сгенерировать атрибутированную строку из HTML.


    func getAttributedTextOfHTMLString(WithParagraphStyle paragraphStyle: NSMutableParagraphStyle?, font: UIFont?, textColor: UIColor?) -> NSMutableAttributedString? {
        guard let htmlData = NSString(string: self).data(using: String.Encoding.unicode.rawValue) else {
            return NSMutableAttributedString(string: self)
        }
        let options = [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html]
        guard let attributedString = try? NSMutableAttributedString(data: htmlData, options: options, documentAttributes: nil) else {
            return NSMutableAttributedString(string: self)
        }
        let finalAttributedText = NSMutableAttributedString(attributedString: attributedString)
        let range = NSRange(location: 0, length: attributedString.length)
        if let paragraph = paragraphStyle {
            finalAttributedText.addAttribute(.paragraphStyle, value: paragraph, range: range)
        }
        if let font = font {
            finalAttributedText.addAttribute(.font, value: font, range: range)
        }
        if let color = textColor {
            finalAttributedText.addAttribute(.foregroundColor, value: color, range: range)
        }
        return finalAttributedText
    }
}

Если длина featureNameAttributedString слишком велика и когда ячейка обновляет attributeString, прокрутка tableView задерживается.

Если фактическая строка html содержится с тегом sup, а высота ячейки устанавливается динамически в соответствии с размером attributeString, представление таблицы не выполняется плавно.

enter image description here

Sécurité McAfeeMD - Mieux

Если в текстовое представление вместо простого атрибута Text установить простой текстовый текст, прокрутка будет плавной.

Есть идеи для решения этой проблемы?

...