tableView单元格内的多个collectionView单元格在滚动上更改设计

时间:2019-06-04 00:01:49

标签: ios swift uitableview uicollectionview uicollectionviewcell

我有一个包含3个单元格的tableview,collectionView 2具有相同的设计 表格视图中的单元格就像

1-类别单元格(垂直的collectionView)

2&3-产品单元格(collectionView水平)

在将类别单元格更改设计滚动到产品上时,将产品分类为产品,将其滚动到类别

这将导致中断UIViewReportBrokenSuperviewChain 进行调试。在具有标签4的collectionView上

我尝试了collectionView.collectionViewLayout.invalidateLayout(),但情况变得更糟

tableView(cellForrowAt)(
if indexPath.row == 3{
            let cell = self.homeTableView.dequeueReusableCell(withIdentifier: "TableCollectionViewCell") as! TableCollectionViewCell
            cell.collectionView.delegate = self
            cell.collectionView.dataSource = self
            cell.collectionView.tag = 4
            cell.collectionView.isScrollEnabled = false
            return cell
        }
}


collectionView(cellForItemAt){

if collectionView.tag == 4 {
            let nib = UINib(nibName: "ProductCell", bundle: nil)
            collectionView.register(nib, forCellWithReuseIdentifier: "ProductCell")
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProductCell", for: indexPath) as! ProductCell
            cell.setup(product: self.newProducts[indexPath.row])
            let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
            layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)
            layout.minimumInteritemSpacing = 10
            layout.minimumLineSpacing = 10
            collectionView.collectionViewLayout = layout
            return cell
        }
}

1 个答案:

答案 0 :(得分:1)

您不应在每次检索单元格时将Nib注册到collectionView中。在实例化/配置collectionView时,您应该注册所有计划使用的单元格类型,或者至少检查该单元格是否已经注册。

类似地,您不应在用于检索单元格的代码中更改集合视图的布局。在大多数情况下,布局将设置一次。在某些复杂的情况下,您可能要在调度reloadData()之前进行更改,以响应正在下载的新数据或某些用户交互(从横向更改为纵向等)。

在刷新集合视图期间更改布局可能会产生您遇到的意外错误。