Alamofire 图像:未为 af_setImageWithURL 设置占位符图像
Alamofire Image : Placeholder image is not set for af_setImageWithURL
我正在使用 af_setImageWithURL
Alamofire API 获取 table 细胞图像并传递默认占位符图像:
let defaultImage = UIImage(named:"myImage")
cell.imageView.af_setImageWithURL(imageURL, placeholderImage:defaultImage, imageTransition: .CrossDissolve(0.1))
问题:当下载路径中不存在我的图片时,单元格也不会显示默认图片。当我向上和向下滚动 table(以清除并重新使用同一个单元格)时,它就会出现。
编辑:
注意到这是在单元格出队后发生的,我先重置图像然后调用 Alamofire。如果我在下面注释掉,它工作正常,但是如果图像 URL 和默认图像都不可用,我 运行 就有显示旧产品图像的风险。
cell.imageView.image = nil
有谁遇到过类似的问题,请指教
正如我所提到的,如果我没有在 Alamofire 调用之前将单元格图像视图的图像设置为 nil,则此方法效果很好。因此,我现在仅在默认图像为 nil 时将单元格图像视图的图像设置为 nil。
cell.imageView.image = nil
您需要确保取消您的请求,并且 nil
输出 prepareForReuse
中的图像。否则你可以 运行 进入几个不同的问题。这是 AFI 中 iOS Example
中的 ImageCell
class。
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
}
}
干杯。
对于swift 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)
我正在使用 af_setImageWithURL
Alamofire API 获取 table 细胞图像并传递默认占位符图像:
let defaultImage = UIImage(named:"myImage")
cell.imageView.af_setImageWithURL(imageURL, placeholderImage:defaultImage, imageTransition: .CrossDissolve(0.1))
问题:当下载路径中不存在我的图片时,单元格也不会显示默认图片。当我向上和向下滚动 table(以清除并重新使用同一个单元格)时,它就会出现。
编辑:
注意到这是在单元格出队后发生的,我先重置图像然后调用 Alamofire。如果我在下面注释掉,它工作正常,但是如果图像 URL 和默认图像都不可用,我 运行 就有显示旧产品图像的风险。
cell.imageView.image = nil
有谁遇到过类似的问题,请指教
正如我所提到的,如果我没有在 Alamofire 调用之前将单元格图像视图的图像设置为 nil,则此方法效果很好。因此,我现在仅在默认图像为 nil 时将单元格图像视图的图像设置为 nil。
cell.imageView.image = nil
您需要确保取消您的请求,并且 nil
输出 prepareForReuse
中的图像。否则你可以 运行 进入几个不同的问题。这是 AFI 中 iOS Example
中的 ImageCell
class。
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
}
}
干杯。
对于swift 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)