使用两种不同类型的单元格时如何确定集合视图的大小

Posted

技术标签:

【中文标题】使用两种不同类型的单元格时如何确定集合视图的大小【英文标题】:How to determine size of collection view when using two different type of cell 【发布时间】:2020-01-22 17:08:52 【问题描述】:

当我使用两种不同类型的单元格时如何确定大小集合视图,其中一个单元格的大小始终为一个,而另一个单元格的大小取决于数组,因此它的大小是动态的。

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

        if indexPath.row == 0 
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileCell", for: indexPath) as! ProfileCollectionViewCell
            cell.bioLabelText.text = bio
            return cell
        else 
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CountryCollectionViewCell

            cell.countryLabel.text = city
            cell.imgView.image = UIImage(named: "lake.jpg")
            cell.makeRounded()
            return cell
        
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
            return uniqueCountryArray.count

    

我的 ProfileCell 编号应为 1,其他单元格的编号应为 uniqueCountryArray.count。但是,当我写 "return uniqueCountryArray.count + 1" 时,它给了我错误。当我写 "return uniqueCountryArray.count" 时,我错过了一个数组元素。

如何动态获取所有数组元素?并且 id 数组大小为 0,我仍然应该显示我的单元格来自配置文件单元格。

【问题讨论】:

什么样的错误?你能给出错误的描述吗? 线程 1:致命错误:索引超出范围 如何在CountryCollectionViewCell 中获得city?是静态变量吗? 不,它来自像“city = uniqueCountryArray[indexPath.row]”这样的数组 请检查我的回答。 【参考方案1】:

将您的city = uniqueCountryArray[indexPath.row] 更改为city = uniqueCountryArray[indexPath.row-1],如下所示

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

    if indexPath.row == 0 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileCell", for: indexPath) as! ProfileCollectionViewCell
        cell.bioLabelText.text = bio
        return cell
    
    else 

        let city = uniqueCountryArray[indexPath.row-1]

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CountryCollectionViewCell
        cell.countryLabel.text = city
        cell.imgView.image = UIImage(named: "lake.jpg")
        cell.makeRounded()
        return cell
    

numberOfItemsInSection 将是uniqueCountryArray.count+1

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return uniqueCountryArray.count+1

【讨论】:

它有效。非常感谢。你能解释一下我为什么要使用“uniqueCountryArray[indexPath.row-1]”索引吗? 因为 TableView 的第一个单元格是ProfileCollectionViewCell 。所以你的第一个CountryCollectionViewCell 实际上是TableView 的第二个单元格。并且您想在该单元格中显示uniqueCountryArray 的第一个元素。 我完全理解。谢谢。

以上是关于使用两种不同类型的单元格时如何确定集合视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何从不同的集合视图单元到不同的视图控制器

如何根据集合视图中的单元格选择来控制表格视图的内容?

AirBnb 如何创建具有不同单元格的集合视图?

如何在集合视图中单击单元格时创建按钮操作

集合视图单元格显示

集合视图中单元格的宽度不正确