[英]Cancel request for Alamofire image
基本信息:我有一個tableView,每個tableView單元格都包含一個圖像和幾個標簽 。 我使用tableView prefetch data方法進行API調用,以在tableView滾動時獲取數據。
問題:有時我看到一個特定的單元格顯示其他單元格的圖像 。 當我滾動速度比正常速度快一點時,就會發生這種情況。 注意:為了克服這個問題,我只需要向上/向下滾動tableView
嘗試過的事情:在准備重用方法時,我將imageView設置為nil。
我得出的結論是:通過調試問題,我了解到,一旦看到一個單元格,便可以使用Alamofire Image發出圖像請求,但是在收到響應之前會對其進行滾動。 因此,可能發生的情況是,在接收到響應時,它正在為該單元格設置圖像,但是由於我正在重復使用這些單元格,因此該單元格不可見。 該單元格包含其他一些數據。
如果單元格不可見,請告訴我如何取消請求。 讓我知道我是否想回答問題。
發生這種情況是因為tableView重用了單元格,並且如果隊列中有圖像下載並且您滾動並且下載完成,它將顯示下載的圖像幾秒鍾,直到正確的圖像下載為止。
在af_setImage
方法中使用占位符。 它將解決您的問題
imageView.af_setImage(withURL: URL(string: img)!, placeholderImage: UIImage(named: "product_placeholder")
在這種情況下,我要做的是將單元格的標簽設置為匹配行號。
當圖像請求完成時,我檢查它是否仍具有相同的標簽(如果被重用,則標簽將被更改)。
在cellForRowAt indexPath
:
cell.tag = indexPath.row
ImageService.shared.getImage(completion: { (image) in
if let image = image, cell.tag == indexPath.row {
//apply image
}
}
這不會取消請求,但是如果單元格不再位於同一位置,它將忽略結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.