将远程图像加载到 Tableview 单元格中
Posted
技术标签:
【中文标题】将远程图像加载到 Tableview 单元格中【英文标题】:Loading remote image into Tableview cell 【发布时间】:2020-04-04 09:33:37 【问题描述】:我正在将服务中的图像提取到表格视图单元格中。我有图像 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)
如果您注意到上面的代码,您可以看到我正在从 layoutsubviews
内部调用 loadImageFromString
,这也可以在 cellForRowAtIndexPath
完成。哪个地方比较好,为什么?
【问题讨论】:
【参考方案1】:这是苹果文档对 layoutSubviews 的评价:
子类可以根据需要重写该方法以执行更精确 子视图的布局。仅当 子视图的自动调整大小和基于约束的行为不 提供你想要的行为。
由于加载图像与自动调整大小或调整约束无关,因此您会误用该方法。此外,layoutSubviews 通常会多次调用可见视图(例如当您旋转设备时)。您无需多次加载图像。
cellForRowAt 是下载配置单元所需的图像的适当方法。
【讨论】:
【参考方案2】:两者之间没有可比性,但最佳实践是在自定义单元类中创建一个配置方法并使用要设置的模型调用它,layoutSubviews
用于当你需要做一些依赖的事情时使用在视图的范围内,顺便说一句,还要确保 loadImageFromString
使用像 SDWebImage 这样的缓存
【讨论】:
我们从哪里调用自定义单元类中的配置方法? cellForRowAt?以上是关于将远程图像加载到 Tableview 单元格中的主要内容,如果未能解决你的问题,请参考以下文章
从 alamofire swift 的 tableview 单元格中的 url 加载图像
将图像保存到核心数据中并将其提取到 tableview 单元格中