将远程图像加载到Tableview单元中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将远程图像加载到Tableview单元中相关的知识,希望对你有一定的参考价值。

我正在努力将服务中的图像提取到表视图单元格中。我有图像URL,可以在cellForRowAtIndexPath或表视图单元格的layoutSubViews方法中获取图像。哪个是最有效的获取远程数据的地方

cellForRowAtIndexPath方法

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell =  self.tableView.dequeueReusableCell(withIdentifier: "custom") as! MovieViewCell
    cell.title =  searchResultMovies[indexPath.row].title
    cell.movieImage = searchResultMovies[indexPath.row].poster
    return cell
}

layoutSubViews方法

override func layoutSubviews() {
    super.layoutSubviews()
    if let title = self.title{
        titleLabel.text = title
    }
    if let movieImage = self.movieImage {
        movieImageView.loadImageFromString(imageString: movieImage)
    }
}

[如果您注意到上面的代码,您可以看到我正在从loadImageFromString内部调用layoutsubviews,这也可以在cellForRowAtIndexPath进行。哪个地方更好?为什么?

答案

这是苹果文档对layoutSubviews的评价:

子类可以根据需要重写此方法以执行更精确的操作其子视图的布局。仅在以下情况下才应覆盖此方法:子视图的自动调整大小和基于约束的行为不会提供您想要的行为。

由于加载图像与自动调整大小或调整约束无关,因此您会滥用该方法。此外,对于可见视图(例如,旋转设备时),经常多次调用layoutSubviews。您不需要多次加载图像。

cellForRowAt是用于下载您需要配置单元的图像的适当方法。

另一答案

两者之间没有比较,但是最佳实践是在自定义单元类中创建一个config方法,并使用要设置的模型来调用它,layoutSubviews供您在需要执行某些操作时使用在视图范围内,BTW还应确保loadImageFromString使用类似于SDWebImage

的缓存

以上是关于将远程图像加载到Tableview单元中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 swift 3 中将图像从服务器加载到 tableView 单元格?

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

重新加载单元格中没有图像的表格视图重新加载

快速将图像加载到单元格失败

Firebase Swift 3 使用 NSURLSession 将配置文件图像加载到 TableView

图像未正确加载