Изображение Alamofire: изображение заполнителя не установлено для af_setImageWithURL
Я использую af_setImageWithURL
Alamofire API для получения изображений ячеек таблицы и передачи изображения-заполнителя по умолчанию:
let defaultImage = UIImage(named:"myImage")
cell.imageView.af_setImageWithURL(imageURL, placeholderImage:defaultImage, imageTransition: .CrossDissolve(0.1))
Проблема: Когда мое изображение не существует в пути загрузки, ячейка также не показывает изображение по умолчанию. Когда я прокручиваю таблицу вверх и вниз (чтобы очистить и повторно использовать одну и ту же ячейку), она появляется.
РЕДАКТИРОВАТЬ:
Заметив, что это происходит после удаления ячейки, я сначала сбрасываю изображение, а затем вызываю Alamofire. Если я прокомментирую ниже строки, это работает нормально, но тогда я рискую показать старое изображение продукта, если и URL изображения, и изображения по умолчанию недоступны.
cell.imageView.image = nil
Кто-нибудь сталкивался с подобной проблемой, пожалуйста, сообщите.
2 ответа
Вы должны убедиться, что вы отменили свой запрос, а также nil
изображение в prepareForReuse
, В противном случае вы можете столкнуться с несколькими различными проблемами. Вот ImageCell
класс в iOS Example
в 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
}
}
Приветствия.
Для 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)
Как я уже упоминал, это хорошо работает, если я не установлю представление изображения ячейки 'nil' перед вызовом Alamofire. Итак, я теперь устанавливаю изображение вида изображения ячейки на ноль, только когда изображение по умолчанию равно нулю.
cell.imageView.image = nil