为什么我不能使用SDWebImage下载png格式文件?

时间:2018-03-15 12:17:05

标签: ios swift sdwebimage

我正在尝试调试我的代码,并且我发现问题为什么我的图像不会出现,因为我无法使用SDWebImage下载我的png格式文件。

如果格式是jpg,它可以正常工作。这是表视图控制器中的完整简化代码。

class ViewController: UIViewController, UITableViewDataSource {
    @IBOutlet weak var tableView: UITableView!

    var imageURLs = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        imageURLs = ["https://app10.pakubuwono6.com/hris/images/notification/Logo Small.png", "https://app10.pakubuwono6.com/hris/images/notification/Logo Small.png", "https://app10.pakubuwono6.com/hris/images/notification/Logo Small.png", "https://app10.pakubuwono6.com/hris/images/notification/Logo Small.png"]
        tableView.reloadData()
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return imageURLs.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellImage") as! CellImage
        cell.imageExample.sd_setImage(with: URL(string: imageURLs[indexPath.row]), placeholderImage: UIImage(named: "placeholder"), options: [.continueInBackground, .progressiveDownload])
        return cell
    }
}

我使用下面的代码行下载图像,我在此视图控制器的表格视图单元格中设置图像

cell.imageExample.sd_setImage(with: URL(string: imageURLs[indexPath.row]), placeholderImage: UIImage(named: "placeholder"), options: [.continueInBackground, .progressiveDownload])

这里出了什么问题?

只显示占位符图片 enter image description here

2 个答案:

答案 0 :(得分:3)

您没有显示用于加载图片的setImage(with:placeholderImage:options:)方法,因此很难确定究竟发生了什么。

但显而易见的问题是,您的图片网址包含未转义的空格。您应该更改以下网址:

imageURLs = 
  ["https://app10.pakubuwono6.com/hris/images/notification/Logo%20Small.png", 
  "https://app10.pakubuwono6.com/hris/images/notification/Logo%20Small.png", 
  "https://app10.pakubuwono6.com/hris/images/notification/Logo%20Small.png", 
  "https://app10.pakubuwono6.com/hris/images/notification/Logo%20Small.png"]

(请注意,您不能按照其他答案中的建议在整个网址字符串上使用addingPercentEncoding,因为网址字符串中的其他符号不应转义,只能转义为文件名。)

使用URLComponents构建网址真的更好。您可以指定网址的不同部分,然后让URLComponents为您提供网址。它正确地为您逃脱了不同的组件。

答案 1 :(得分:2)

您的图片网址包含空格 试试这段代码

if let url = imageURLs[indexPath.row].addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed){
 cell.imageExample.sd_setImage(with: URL(string: url), placeholderImage: UIImage(named: "placeholder"), options: [.continueInBackground, .progressiveDownload])

}