несколько ячеек collectionView внутри ячеек tableView меняют дизайн при прокрутке - PullRequest
0 голосов
/ 04 июня 2019

У меня есть таблица с 3 ячейками, которые collectionView 2 имеет такой же дизайн ячейки в табличном представлении идут как

1- ячейка категории (вертикальная коллекция)

2 & 3- Товарная ячейка (collectionView горизонтальная)

при прокрутке дизайна ячейки категории к продукту и для продукта, который требуется для дизайна ячейки категории

это приводит к прерыванию UIViewReportBrokenSuperviewChain для отладки. на коллекцию с тегом 4

Я пытался 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 Ответ

1 голос
/ 04 июня 2019

Вы не должны регистрировать свой Nib в collectionView каждый раз, когда вы извлекаете ячейку.Вы должны зарегистрировать все типы ячеек, которые вы планируете использовать, в collectionView, когда он создается / конфигурируется, или, по крайней мере, проверить, зарегистрирована ли эта ячейка или нет.

Аналогично, вы не должны изменять представление коллекциимакет в коде, используемом для извлечения ячейки.Макет в большинстве случаев будет установлен один раз.В некоторых сложных случаях вам может потребоваться изменить его непосредственно перед отправкой reloadData (), отвечающей на загружаемые новые данные или на некоторые пользовательские взаимодействия (изменение с альбомной на портретную и т. Д.).

Изменение макета во время коллекцииобновление представления может привести к непредвиденным ошибкам, с которыми вы столкнулись.

...