我面临着一个问题。。。我正在尝试为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如果它不返回你想要的手机。