TableViewCell中的Swift CollectionView不重用内存问题

时间:2019-03-05 10:42:35

标签: ios swift uitableview memory uicollectionview

我有一个UICollectionView嵌入到UITableViewCell中。 collectionView显示一长串图像,这就是为什么在稍微滚动后我收到内存警告并且应用程序崩溃的原因。图像是使用KingFisher Library缓存的,但是我注意到实际上并没有重复使用单元格,尽管我滚动单元格不会像往常一样重新加载。

在这种情况下,我认为不需要代码,如果需要,我可以发布它。 您是否知道能够重用嵌入到tableViewCell中的collectionView单元的解决方案?非常感谢你!

此处的代码:

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)
        }
}

0 个答案:

没有答案