如何使用 Alamofire 将图像填充到 UICollectionView Swift 4
How to fill images in to UICollectionView with Alamofire Swift 4
我有一个聊天记录,它只是一个 UICollectionView
。每个销售都有一个头像 (UIImage
) 和一个文字气泡。我试图通过使用 Alamofire 从服务器获取头像 URL 来 为头像 填充适当的图像,如下所示:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "chatMessage", for: indexPath) as! ChatMessageCell
let imageURL = URL(string: messagesArray![indexPath.item].userAvatar)
Alamofire.download(imageURL!).responseData { response in
if let data = response.result.value {
cell.userAvatar.image = UIImage(data: data)
}
}
cell.messageText.text = messagesArray![indexPath.item].userText
}
我的问题: 有的单元格出现头像,有的不出现。我认为这与 Alamofire 异步工作有关。所以我的问题是如何将图像正确填充到 UICollectionView
以在每个单元格中显示每个头像?
我认为最好使用 SDWebImage ,因为根据您当前的实现,图像获取会发生多次
imageView.sd_setImage(with: URL(string: "http://www.example.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
UICollectionView 重用现有单元格。如果您有一个包含一百万个单元格的 collectionView,则不会实例化一百万个 UICollectionView 单元格,但它们在滚动时会被重用。现在您的结果回调块可能会设置相同单元格的图像。
要解决您的问题,您需要缓存图像。有多个关于此主题的教程。
我有一个聊天记录,它只是一个 UICollectionView
。每个销售都有一个头像 (UIImage
) 和一个文字气泡。我试图通过使用 Alamofire 从服务器获取头像 URL 来 为头像 填充适当的图像,如下所示:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "chatMessage", for: indexPath) as! ChatMessageCell
let imageURL = URL(string: messagesArray![indexPath.item].userAvatar)
Alamofire.download(imageURL!).responseData { response in
if let data = response.result.value {
cell.userAvatar.image = UIImage(data: data)
}
}
cell.messageText.text = messagesArray![indexPath.item].userText
}
我的问题: 有的单元格出现头像,有的不出现。我认为这与 Alamofire 异步工作有关。所以我的问题是如何将图像正确填充到 UICollectionView
以在每个单元格中显示每个头像?
我认为最好使用 SDWebImage ,因为根据您当前的实现,图像获取会发生多次
imageView.sd_setImage(with: URL(string: "http://www.example.com/path/to/image.jpg"), placeholderImage: UIImage(named: "placeholder.png"))
UICollectionView 重用现有单元格。如果您有一个包含一百万个单元格的 collectionView,则不会实例化一百万个 UICollectionView 单元格,但它们在滚动时会被重用。现在您的结果回调块可能会设置相同单元格的图像。
要解决您的问题,您需要缓存图像。有多个关于此主题的教程。