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

Posted

技术标签:

【中文标题】tableView 单元格内的多个 collectionView 单元格在滚动时更改设计【英文标题】:multiple collectionView cells inside tableView cells changing design on scroll 【发布时间】:2019-06-04 00:01:49 【问题描述】:

我有一个包含 3 个单元格的 tableview,它们是 collectionView 2 具有相同的设计 tableview 中的单元格就像

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

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

在滚动类别单元格时将设计更改为产品,对于需要类别单元格设计的产品也是如此

这会导致 Break on 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】:

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

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

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

【讨论】:

1- 我将寄存器 Nib 移动到 tableview cellForRowAt,因为我无法在 viewDidLoad 中访问它 2- 删除的布局更改相同,但在滚动时,我得到第 0 行的第 4 行的单元格和第 4 行的第 0 行的单元格只是设计,但内容就像我将产品加载到类别 collectionView 中一样,并且对于类别与我将它们加载到产品 collectionView 中的类别相同我认为这是来自 Tableview 单元格的行编号,但我不明白如何解决它有什么想法吗? 我。为类别创建了一个带有collectionView的新表格单元格,所以现在有2个带有collectionview的单元格,似乎这解决了问题谢谢:))

以上是关于tableView 单元格内的多个 collectionView 单元格在滚动时更改设计的主要内容,如果未能解决你的问题,请参考以下文章

完成在单元格内编辑 textview 后向 tableview 添加另一个单元格

在单元格内编辑textview时,将另一个单元格添加到tableview

TableView单元格内的TableView,自动调整单元格高度

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview

tableview单元格内的ios文本字段

发生单元格内容交互时更新 TableView 单元格高度