У меня есть 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)
}
}