在 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数据源