Swift CollectionView в TableViewCell не использует проблему памяти повторно - PullRequest
0 голосов
/ 05 марта 2019

У меня есть UICollectionView, встроенный в UITableViewCell. CollectionView отображает длинный список изображений, поэтому после небольшой прокрутки я получаю предупреждение памяти и приложение вылетает. Изображения кэшируются с помощью библиотеки KingFisher, но я заметил, что ячейка фактически не используется повторно, хотя я прокручиваю ячейки не как обычно, перезагружается.

Я не думаю, что в этом случае нужен код, если вам нужно, я могу опубликовать его. Знаете ли вы решение для повторного использования ячеек collectionView, встроенных в tableViewCell? Большое спасибо!

Код здесь:

UITableViewCell:

override func awakeFromNib() {
    super.awakeFromNib()
    self.collectionView.delegate = self
    self.collectionView.dataSource = self

    let layout = UICollectionViewFlowLayout()
    //        layout.sectionInset = UIEdgeInsets(top: 20, left: 5, bottom: 10, right: 5)
    layout.sectionInset = UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    layout.itemSize = CGSize(width: 111, height: 111)
    layout.footerReferenceSize = CGSize(width: 354, height: 80)
    self.collectionView.reloadData()
    self.collectionView.collectionViewLayout = layout
    self.collectionView.reloadData()

}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return tattooStyles.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! ProfileTattooCell
    let image = self.tattooStyles[indexPath.row].imageURL ?? ""
    if let imageURL = URL(string: image) {            
        cell.loadTattoo(image: imageURL)
    }

    return cell
}

UIViewController cellForRow:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.section == 0{
        let cell = tableView.dequeueReusableCell(withIdentifier: "artistPhotoCell") as! artistPhotoCell
        cell.tattooStyles = self.tattooStyles
        cell.delegate = self
        cell.showLoadMore = !areAllPhotosLoaded
        return cell
    }}

UIViewController CollectionViewHeight:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let section = indexPath.section
    if section == self.numberOfSections-1  {
        let photosNumber = self.tattooStyles.count
        var height = CGFloat(0.0)
        if photosNumber > 3 {
            height = CGFloat(photosNumber/3 * 121 + 121) }
        }else{
            height = CGFloat(photosNumber * 121 + 121)
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...