我有一个包含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
}
}
答案 0 :(得分:1)
您不应在每次检索单元格时将Nib注册到collectionView中。在实例化/配置collectionView时,您应该注册所有计划使用的单元格类型,或者至少检查该单元格是否已经注册。
类似地,您不应在用于检索单元格的代码中更改集合视图的布局。在大多数情况下,布局将设置一次。在某些复杂的情况下,您可能要在调度reloadData()之前进行更改,以响应正在下载的新数据或某些用户交互(从横向更改为纵向等)。
在刷新集合视图期间更改布局可能会产生您遇到的意外错误。