Загрузка удаленного изображения в ячейку Tableview - PullRequest
1 голос
/ 04 апреля 2020

Я работаю над извлечением изображения из сервиса в ячейку табличного представления. У меня есть URL изображения, и я могу получить изображение в cellForRowAtIndexPath или в layoutSubViews методе ячейки табличного представления. Какое наиболее эффективное место для получения удаленных данных

Метод cellForRowAtIndexPath

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell =  self.tableView.dequeueReusableCell(withIdentifier: "custom") as! MovieViewCell
    cell.title =  searchResultMovies[indexPath.row].title
    cell.movieImage = searchResultMovies[indexPath.row].poster
    return cell
}

Метод layoutSubViews

override func layoutSubviews() {
    super.layoutSubviews()
    if let title = self.title{
        titleLabel.text = title
    }
    if let movieImage = self.movieImage {
        movieImageView.loadImageFromString(imageString: movieImage)
    }
}

, если вы заметили приведенный выше код Вы можете видеть, что я звоню loadImageFromString изнутри layoutsubviews, что также можно сделать в cellForRowAtIndexPath. Какое место лучше сделать и почему?

Ответы [ 2 ]

5 голосов
/ 04 апреля 2020

Вот что Apple Docs может сказать о layoutSubviews:

Подклассы могут переопределять этот метод по мере необходимости для более точной компоновки своих подпредставлений. Вы должны переопределить этот метод, только если авторазмер и поведения на основе ограничений для подпредставлений не предлагают нужного вам поведения.

Поскольку загрузка изображения не имеет ничего общего с автоматическим изменением размера или настройкой ограничений, вы ' буду неправильно использовать метод. Кроме того, layoutSubviews часто вызывается более одного раза для видимого представления (например, при повороте устройства). Вам не нужно загружать изображение более одного раза.

cellForRowAt - это подходящий метод для загрузки изображения, необходимого для настройки ячейки.

2 голосов
/ 04 апреля 2020

Нет никакого сравнения между двумя, но лучше всего создать метод config внутри пользовательского класса ячеек и вызвать его с моделью, которую нужно установить, layoutSubviews предназначен для использования, когда вам нужно сделать что-то, что зависит в рамках представления BTW также следит за тем, чтобы loadImageFromString использовал кеш, такой как SDWebImage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...