图像视图在将图像设置为从URL下载的图像后不显示图像

时间:2018-01-10 07:35:41

标签: ios swift uiimageview

这就是我正在做的事情。

extension UIImageView {
    func downloadedFrom(url: URL, contentMode mode: UIViewContentMode = .scaleAspectFit) {
        contentMode = mode
        URLSession.shared.dataTask(with: url) { data, response, error in
            guard
                let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
                let mimeType = response?.mimeType, mimeType.hasPrefix("image"),
                let data = data, error == nil,
                let image = UIImage(data: data)
                else { return }
            DispatchQueue.main.async() {
                self.image = image
            }
            }.resume()
    }
    func downloadedFrom(link: String, contentMode mode: UIViewContentMode = .scaleAspectFit) {
        guard let url = URL(string: link) else { return }
        downloadedFrom(url: url, contentMode: mode)
    }

我在图像中检查了它在调试状态下的预览中的显示图像。但在self.image = image之后

图像视图图像上没有任何变化。谁知道问题出在哪里?谢谢

4 个答案:

答案 0 :(得分:3)

下载图片的最有效方式:SDWebImage

您可以将Cocoa Pod文件用于SDWebImage Library。

  1. 初始化pod文件。
  2. pod' SDWebImage'
  3. 安装Pod文件。
  4. Swift片段:

    import SDWebImage
    
    imageView.sd_setImage(with: URL(string: @"user-url"), placeholderImage: UIImage(named: "placeholder"))
    

    Objective-C片段:

    #import <SDWebImage/UIImageView+WebCache.h>
    ...
    [imageView sd_setImageWithURL:[NSURL URLWithString:@"user-url"]
                 placeholderImage:[UIImage imageNamed:@"placeholder"]];
    

    希望无论何时使用UICollectionView或UITableView,这都有助于有效地下载图像。

答案 1 :(得分:0)

您可以使用下面的Kingfisher库轻松完成。

let url = URL(string: "url_of_your_image")
imageView.kf.setImage(with: url)

答案 2 :(得分:0)

请尝试以下代码

 if data != nil { // check nil here

                        let image = UIImage(data: data)
                    DispatchQueue.main.async { 
                        self.image = image
                    }
                    }
    }.resume()

答案 3 :(得分:0)

无需检查图像mime类型,只需检查数据和图像就足够了,因为数据将为零错误,反之亦然。

更改为

URLSession.shared.dataTask(with: url) { data, response, error in
        guard let data = data, let image = UIImage(data: data) else { return }
        DispatchQueue.main.async {
            self.image = image
        }
    }.resume()

使用调试器与图像交叉检查。