我正在尝试在处理后显示图像。 这是我的代码。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "foodList", for: indexPath)
let dict = itemsArray?[indexPath.row]
cell.textLabel?.text = dict?["food_name"] as? String
var URLz = dict?["image_url"] as! String
Alamofire.request(URLz).response{ response in
if let data = response.data{
let image = UIImage(data:data)
cell.imageView?.image = image
}else{
print("Data is nil.")
}
}
return cell;
}
当我做以下事情时;没有显示任何内容但表格行。
答案 0 :(得分:1)
在tableviewcell中下载并显示图像不是trivial,您需要在将图像分配给imageview之前检查单元格是否可见。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "foodList", for: indexPath)
.............
cell.imageView?.image = UIImage(named: "placeholder.png") //or nil
if let dict = dict, imageURL = dict["image_url"] as? String {
Alamofire.request(imageURL).response { response in
if let data = response.data, let image = UIImage(data: data) {
DispatchQueue.main.async {
if let cell = tableView.cellForRow(at: indexPath) {
cell.imageView?.image = image
}
}
} else {
print("Data is nil.")
}
}
}
return cell
}
更好的选择是使用第三方库,如Kingfisher,它使用UIImageView扩展来从网络下载和缓存图像。它就像下面那样简单
let url = URL(string: imageURL)!
cell.imageView.kf.setImage(with: url, placeholder: nil)