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

如何从HTTP请求将图像加载到UIButton Swift中

从 URL 加载图像并使用 Swift4 将它们存储在本地

如何在 swift 4 中从图像选择器获取照片本地 url