使用Async attributesText自我调整tableview单元格大小

时间:2017-06-11 11:27:00

标签: ios swift uitableview

我在界面构建器中创建了一个表视图和单元格。

我已配置:

    tableView.estimatedRowHeight = 140
    tableView.rowHeight = UITableViewAutomaticDimension

当我立即在cellForRowAt设置单元格时,它确实有效:

let text = NSAttributedString(string: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?")
cell.detail.attributedText = text

但是,我们怎样才能将繁重的工作转移到后台任务中,以便我们有一个黄油顺滑的滚动?

如果我将之前的代码更改为:

            DispatchQueue.global().async {
                let text = NSAttributedString(string: "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?")
                DispatchQueue.main.async {
                    cell.detail.attributedText = text
                }
            }

然后自我调整不再起作用了。我想我在更新文本后尝试过每一种方法,比如setNeedsLayout

1 个答案:

答案 0 :(得分:0)

事实证明,最有效的方法是计算/缓存属性字符串,当完成该工作时只需重新加载单元格!