2016-08-23 4 views
1

nicht gesetzt Ich verwende af_setImageWithURL Alamofire API, um die Tabellenzelle Bilder zu holen und ein Standard-Platzhalter Bild übergeben:Alamofire Bild: Platzhalter-Bild ist für af_setImageWithURL

let defaultImage = UIImage(named:"myImage") 
cell.imageView.af_setImageWithURL(imageURL, placeholderImage:defaultImage, imageTransition: .CrossDissolve(0.1)) 

Problem: Wenn mein Bild nicht bei nicht existiert Der Download-Pfad, Zelle zeigt auch nicht das Standardbild an. Wenn ich die Tabelle & nach unten scrolle (um dieselbe Zelle zu löschen und wiederzuverwenden), wird sie angezeigt.

EDIT:

Bemerkt dies nach geschieht die Zelle Ausreihen, setze ich das Bild zuerst und dann Alamofire nennen. Wenn ich unter der Zeile auskommentiere, funktioniert es gut, aber dann läuft ich Gefahr, ein altes Produktbild anzuzeigen, wenn sowohl die Bild-URL als auch die Standardbilder nicht verfügbar sind.

cell.imageView.image = nil 

Jeder vor einem ähnlichen Problem, bitte beraten.

+0

sicherstellen, sobald das Bild verfügbar ist oder nicht 'defaultImage' –

+0

' defaultImage' ist völlig in Ordnung und zeigt das Bild. Wie gesagt, das Standardbild wird in der Scroll-Tabellenansicht nach oben und unten angezeigt. – Abhinav

+0

können Sie einige zusätzliche Code zu diesem –

Antwort

1

Sie müssen sicherstellen, dass Sie Ihre Anfrage abbrechen und auch nil aus dem Bild in prepareForReuse. Ansonsten können Sie auf ein paar verschiedene Probleme stoßen. Hier ist die ImageCell Klasse in der iOS Example in AFI.

class ImageCell: UICollectionViewCell { 
    class var ReuseIdentifier: String { return "org.alamofire.identifier.\(type(of: self))" } 
    let imageView: UIImageView 

    // MARK: - Initialization 

    override init(frame: CGRect) { 
     imageView = { 
      let imageView = UIImageView(frame: frame) 

      imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
      imageView.contentMode = .center 
      imageView.clipsToBounds = true 

      return imageView 
     }() 

     super.init(frame: frame) 

     contentView.addSubview(imageView) 

     imageView.frame = contentView.bounds 
    } 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    // MARK: - Lifecycle Methods 

    func configureCell(with URLString: String, placeholderImage: UIImage) { 
     let size = imageView.frame.size 

     imageView.af_setImage(
      withURL: URL(string: URLString)!, 
      placeholderImage: placeholderImage, 
      filter: AspectScaledToFillSizeWithRoundedCornersFilter(size: size, radius: 20.0), 
      imageTransition: .crossDissolve(0.2) 
     ) 
    } 

    override func prepareForReuse() { 
     super.prepareForReuse() 

     imageView.af_cancelImageRequest() 
     imageView.layer.removeAllAnimations() 
     imageView.image = nil 
    } 
} 

Prost.

+0

Was ist, wenn wir den Disk Cache mit af_setImage und URLRequest verwenden müssen? –

0

Wie schon erwähnt, funktioniert das gut, wenn ich nicht kurz vor Alamofire call image view 'image nil einstelle. Also setze ich jetzt das Image der Zellenbildansicht auf null, wenn das Standardbild null ist.

cell.imageView.image = nil 
Verwandte Themen