2

我正在使用af_setImageWithURLAlamofire API 来获取表格单元格图像并传递默认占位符图像:

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

问题:当下载路径中不存在我的图像时,单元格也不会显示默认图像。当我上下滚动表格(以清除和重新使用同一个单元格)时,它就会出现。

编辑:

注意到这是在使单元格出列后发生的,我先重置图像,然后调用 Alamofire。如果我在下面注释掉,它可以正常工作,但是如果图像 URL 和默认图像都不可用,我将面临显示旧产品图像的风险。

cell.imageView.image = nil

有谁遇到过类似问题,求指教。

4

3 回答 3

4

您需要确保取消您的请求,并nilprepareForReuse. 否则,您可能会遇到一些不同的问题。这是AFIImageCell中的课程。iOS Example

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
    }
}

干杯。

于 2016-08-24T14:32:11.243 回答
2

对于迅捷5

let imageView = UIImageView(frame: frame)
let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!

imageView.af.setImage(withURL: url, placeholderImage: placeholderImage)
于 2020-04-01T12:10:21.347 回答
0

正如我所提到的,如果我没有在 Alamofire 调用之前将单元格图像视图的图像设置为零,这会很好。所以,我现在只在默认图像为 nil 时将单元格图像视图的图像设置为 nil。

cell.imageView.image = nil
于 2016-08-23T16:17:05.947 回答