在UITableViewCell中更新UITextView的attributedText是滞后的

时间:2015-09-25 07:57:46

标签: ios uitableview uitextview

我有一个有一个tableView的视图控制器,而tableView有很多单元格。

class TimelineCell: UITableViewCell {
    @IBOutlet weak var photo: UIImageView!
    @IBOutlet weak var message: UITextView!
}

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

        let cell: TimelineCell = tableView.dequeueReusableCellWithIdentifier(CellIdentifier, forIndexPath: indexPath) as! TimelineCell
        let messageAttributedString = entity.messageAttributedString
        cell.message.attributedText = messageAttributedString
        return cell
    }
}

如果messageAttributedString的长度太长且cell.message的高度太长,则滚动时tableView会出现滞后现象。如果我删除了更新的attributionText代码,滚动就会很顺利。

有什么想法解决这个问题?

我试过UILabel,问题仍然存在 我可以在后台线程中更新attributedText吗?我想我不能。

我首先尝试将UITextView转换为UIImage,然后在单元格中显示图像。 tableView不再是滞后的,但我不认为这是一个很好的解决方案。

1 个答案:

答案 0 :(得分:1)

这是正常做法(转换为UIImage),因为即使是Apple也提供了可以与UITableViewCell一起使用的shouldRasterize这样的东西。 在后台渲染attributesString也没有任何罪恶感。您甚至可以准备整个表格单元格对象,将它们存储到堆栈中,然后从cellForRawAtIndexPath返回它们。

所有可能的解决方案都可以接受,以提供最佳用户体验。