Swift 3将图像从URL添加到UIImageView [重复]
Posted
技术标签:
【中文标题】Swift 3将图像从URL添加到UIImageView [重复]【英文标题】:Swift 3 add image from URL to UIImageView [duplicate] 【发布时间】:2017-09-02 21:31:15 【问题描述】:我正在尝试将图像从 URL 添加到 UIImageView
。我没有收到任何错误,但屏幕上没有显示任何内容。
我在这里做错了什么?
我对来自.xcassets
的图像使用了相同的方法,并且效果很好,但它无法通过远程 URL 工作。
这是我的文件:
RelatedCollectionViewCell.swift
class RelatedCollectionViewCell: UICollectionViewCell
@IBOutlet weak var related: UIImageView!
ViewController.swift
var images = [AnyObject]()
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return images.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
do
try images.append(UIImage(data: Data(contentsOf: URL(string:"https://i.ytimg.com/vi/kWxHV9jkwSA/hqdefault.jpg")!))!)
catch
print(error)
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "RelatedCollectionViewCell", for: indexPath) as! RelatedCollectionViewCell
cell.related.image = images[indexPath.row] as? UIImage
return cell
【问题讨论】:
【参考方案1】:这不起作用,因为在执行 collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int)
的那一刻,images
数组中的项目为零。 (因为您从 URL 加载它们至少需要一点时间)。
所以你必须在下载完图片后重新加载:
collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
....
self.reloadData()
或者,如果您知道正手的数量,您当然可以在一个部分中给它固定数量的项目:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return 5//whatever amount
当然,最好异步加载图像以防止它在没有互联网连接时冻结您的应用,但这不是问题的一部分。
【讨论】:
如何。请问我可以这样做吗?你能给我一个链接或smth。或者至少需要什么? 在cellForItemAt...
内调用self.reloadData()
?不应该那样做。正确的答案是改用 DispatchQueue.main.async。
@rexhin 上面链接的问题,标记为“可能被骗”包含您需要的所有信息。
使用异步加载确实会更好,但由于问题是出了什么问题,我想像这样发布它
只在重复问题中使用 UIImageView 扩展【参考方案2】:
这是因为你的数组 images.count = 0 在第一次加载时
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return images.count
因为 Images 数组是空的
如果您的 Item 数量为 0 ,则您的应用未输入 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
。
【讨论】:
以上是关于Swift 3将图像从URL添加到UIImageView [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 3 将图像从 Rest Api 加载到视图中加载方法
无法使用 Swift 将图像 url 从 JSON(API) 绑定到 tableviewcell
从用户点击 Swift 将图像添加到 UIImageView