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 中动态调整标题视图的大小?
基于UILabel的动态UICollectionView标头大小
iOS-KVO动态监听UIScrollView的contentSize(UITableViewUICollectionView)