我有一个有一个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不再是滞后的,但我不认为这是一个很好的解决方案。
答案 0 :(得分:1)
这是正常做法(转换为UIImage),因为即使是Apple也提供了可以与UITableViewCell一起使用的shouldRasterize这样的东西。 在后台渲染attributesString也没有任何罪恶感。您甚至可以准备整个表格单元格对象,将它们存储到堆栈中,然后从cellForRawAtIndexPath返回它们。
所有可能的解决方案都可以接受,以提供最佳用户体验。