iOS UICollectionView 动态切换单元格NIB

Posted

技术标签:

【中文标题】iOS UICollectionView 动态切换单元格NIB【英文标题】:iOS UICollectionView switch cell NIB dynamically 【发布时间】:2020-02-24 09:38:43 【问题描述】:

我正在将我的 ios 应用程序从表格视图更新为集合视图,以支持“网格化”选项。 我有两种细胞类型。一种更适合“tableView”类型的外观,并占据屏幕的整个宽度。另一个是更适合网格的单元格。

我不能对两者使用相同的单元格类型,因为 tableView 类型的单元格比网格单元格具有更多的水平信息。

我有一个按钮按下事件,它将在我的单元格类型之间循环,更新布局并适当地更改单元格重用标识符。问题是,已经在视图中的任何单元格都不会更改为新的单元格类型。如果我稍微滚动一下,新的单元格类型就会开始出现。

我想这与 collectionView 采用 indexPath 的 dequeue 函数有关。我可以显式地重新加载这些单元格以让它们使用新类型,但这会导致不需要的动画,更不用说感觉像 hack。

如何动态切换单元格类型?

链接是演示该问题的视频。

https://imgur.com/1Q0Xu9S

如您所见,在我更改单元格后,它们仍然使用旧的 NIB(包含所有额外信息)。但如果我向下滚动,将使用新的 NIB。

【问题讨论】:

在单元格更改后调用 layoutifneed 更改后重新加载单元格 我尝试了 layoutifneeded 但没有奏效。更改后我正在重新加载单元格,但这会导致一种双重动画,如果可能的话,我想避免。 【参考方案1】:

有两种解决方案:-

    为每种类型的单元格使用两个集合视图,单击按钮隐藏和显示各自的集合视图。

    单击按钮从超级视图中删除集合视图,再次添加并重新加载

【讨论】:

我认为现在双重动画比交叉淡入淡出动画更可取,因为它更符合上下文。

以上是关于iOS UICollectionView 动态切换单元格NIB的主要内容,如果未能解决你的问题,请参考以下文章

计算 iOS 中水平 UICollectionView 的动态单元格高度

iOS - 如何在将单元格动态插入 UICollectionView 之前正确重新加载单元格

UICollectionView 部分标题崩溃 iOS 8

如何在 UICollectionView 中动态调整标题视图的大小?

基于UILabel的动态UICollectionView标头大小

iOS-KVO动态监听UIScrollView的contentSize(UITableViewUICollectionView)