swift 如何在CollectionView中只显示5个单元格?

3htmauhk  于 2022-12-10  发布在  Swift
关注(0)|答案(2)|浏览(205)

我只想显示5个职位从我的WordPress网站到CollectionView在我的Swift应用程序。我是非常新的Swift。我已经设置为网址

https://www.sikhnama.com/wp-json/wp/v2/posts/?categories=4&per_page=5

这只得到5个职位从WordPress的,但在collectionView后5个职位,它重复的职位,但我希望后5个单元格不应该有任何更多的单元格和职位。这是我的代码。

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

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
    return newsData.count + (newsData.count/4)
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    
     if (indexPath.item % 4 == 3){
        
        let adcell = collectionView.dequeueReusableCell(withReuseIdentifier: "adcell", for: indexPath) as! RelatedViewCell
         
        
       
         adcell.banner.adUnitID = bannerAd
         adcell.banner.rootViewController = self
         adcell.banner.load(GADRequest())
         adcell.banner.delegate = self
        
       return adcell
        
    }
    
    else{
        
       
        
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "postcell", for: indexPath) as! RelatedViewCell
        
        
        
        cell.setup(with: newsData[indexPath.row-(indexPath.row/4)])
        return cell
    }
}

我也试过这个

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
    return 5
}

然后我在这一行得到错误“索引超出范围”

cell.setup(with: newsData[indexPath.row-(indexPath.row/4)])

也尝试了

cell.setup(with: newsData[indexPath.row])

但是没有用,,帮帮忙

66bbxpm5

66bbxpm51#

根据评论...
使用此代码:

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

您是说集合视图有两个部分。
但是,在numberOfItemsInSectioncellForItemAt中,您都没有考虑多个部分。
因此,您要在每个区段中复制相同的储存格。
除非您真的有2个区段,否则您应该针对numberOfSections传回1

yjghlzjz

yjghlzjz2#

numbersOfItemsInSection函数是您将设置为仅显示5的函数。但如果您从API获取数据,则可能没有5,从而导致“Index out of Range”错误。
我会做什么:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int{
if newsData.count + (newsData.count/4) > 5 {
return 5
} else {
 return newsData.count + (newsData.count/4)
 }     
}

这将检查返回的数据,如果大于5,则仅显示5;如果小于5,则将显示该金额。

相关问题