在 UICollectionView 中注册多个单元格(swift 3)

Posted

技术标签:

【中文标题】在 UICollectionView 中注册多个单元格(swift 3)【英文标题】:Registering multiple cells in UICollectionView (swift 3) 【发布时间】:2017-05-15 04:02:21 【问题描述】:

对于UICollectionViews,是否可以有多种单元格类型?

例如:

media_cell

regular_cell

ad_cell

您是只需要注册它们还是必须包含一个 if 语句并根据一些变量更改布局以实现此效果。

例如:

if cell.ad == true 


原因是,当图像出现时,我想要一个稍微不同大小的单元格。我想调整单元格的大小可能会起作用,但我在网上没有看到任何内容。

任何建议

【问题讨论】:

【参考方案1】:

试试这个: 1.注册两个(或更多)细胞。 2.为每个配置cellforItem。 3. 为每个配置 sizeForItem。 第一:

self.collectionView.register(SmallCell.self, forCellWithReuseIdentifier: "smallCell")
self.collectionView.register(BigCell.self, forCellWithReuseIdentifier: "bigCell")

然后:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
     if dataSource[indexPath.item].hasImage 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: “smallCell”, for: indexPath) as! SmallCell
        let model = dataSource[indexPath.item]
        cell.model = model
        return cell
       else 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: “bigCell”, for: indexPath) as! BigCell
        let model = dataSource[indexPath.item]
        cell.model = model
        return cell
          


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
     if dataSource[indexPath.item].hasImage 
        return CGSize(width: collectionView.frame.width, height: cellHeight+100)
      else    
        return CGSize(width: collectionView.frame.width, height: cellHeight)    
            

【讨论】:

如何引用数据源? 什么意思? dataSource 只是我编写的一个示例数组。其中数组中的每个元素都有一个 Bool hasImage。这只是虚拟代码。 if 语句可以写成一百种不同的方式。你自己应该知道哪些 indexPaths 应该有图像,哪些不应该。【参考方案2】:

两件事,一切都应该有效:

    您可以在一个集合视图中注册任意数量的单元格。 查看自调整单元格主题,您不必担心单元格大小不同。

Great tutorial

更多信息在这个精彩的答案here

祝你好运:)

【讨论】:

当您说注册任意数量的单元格时,您是指任意数量的实例还是不同类型的单元格? 任何类型的单元格

以上是关于在 UICollectionView 中注册多个单元格(swift 3)的主要内容,如果未能解决你的问题,请参考以下文章

注册大量 UICollectionViewCell 类以在 UICollectionView 中重用

同时在多个 UICollectionView 上调用 reloadData

一个UIViewController中的多个UICollectionView数据源

麻烦出队 uicollectionview 单元格(swift 3)

UICollectionView 未注册单元格

UICollectionView 中的 Nib Cell 注册不显示