Изображение 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
Другие вопросы по тегам