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

Nar*_*ari 1 uitableview uikit ios swift

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

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
}
Run Code Online (Sandbox Code Playgroud)

layoutSubViews方法

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

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

Rob*_*Rob 5

这是苹果文档对 layoutSubviews 的看法:

子类可以根据需要覆盖此方法以对其子视图执行更精确的布局。仅当子视图的自动调整大小和基于约束的行为不提供您想要的行为时,您才应该覆盖此方法。

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

cellForRowAt 是下载配置单元所需的图像的适当方法。