У меня есть 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, представление таблицы не выполняется плавно.
Sécurité McAfeeMD - Mieux
Если в текстовое представление вместо простого атрибута Text установить простой текстовый текст, прокрутка будет плавной.
Есть идеи для решения этой проблемы?