我面临着一个问题。。。我正在尝试为CollectionView中的show native ads添加一个新的自定义单元格,基本上我是说

indexPath.row == 2 || indexPath.row == 5

应该会出现与广告相关的单元格。现在的问题是,adsCell正确显示,但它取代了其他内容。
所以,如果之前我有一个collectionView,其中所有单元格的标签都是从1到10,那么现在我有了如下内容:1、ADSCell、3、4、ADSCell等等。
所以基本上它跳过了现在被adsCell替换的数字2和数字5。
我怎样才能保留内容,但放在它们之间的adsCell?
  func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if section == 0 {
            return itemsViewModel.itemsModel.featuredItems.value.count
        }else {
            return itemsViewModel.itemsModel.dailyItems.value.count
        }

    }

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 2
    }

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {


        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "itemCell", for: indexPath) as! DailyItemCollectionViewCell

        let cellAds = collectionView.dequeueReusableCell(withReuseIdentifier: "adsCell", for: indexPath)

        if indexPath.section == 0{

            if indexPath.row == 2 || indexPath.row == 5 {
                return cellAds
            }else {
                print("INDEX", indexPath)
                let featuredItems = itemsViewModel.itemsModel.featuredItems.value[indexPath.row]
                cell.configure(with: featuredItems)
            }
        }else {
            let dailyItems = itemsViewModel.itemsModel.dailyItems.value[indexPath.row]
            cell.configure(with: dailyItems)
        }

        return cell
    }

最佳答案

if-statement函数中使用依赖于索引的cellForItemAt是不好的做法,最好使dataSource更一般化,以便它可以包含广告项,例如,可以为每个type项设置dataSource以指示其广告与否,然后应将广告项放入dataSource的索引2和索引5,然后在cellForItemAt中为每个项检查该类型,如果它的广告返回ADSCell如果它不返回你想要的手机。

10-08 06:29