Swift CollectionView 显示错误
Posted
技术标签:
【中文标题】Swift CollectionView 显示错误【英文标题】:Swift CollectionView Display Wrong 【发布时间】:2021-01-08 05:16:44 【问题描述】:我的应用中有一个集合视图。 我想将每个项目设置为具有不同的颜色。 我用的是switch case,如下。
switch indexPath.row
case 0: cell.label.text = "0"
cell.label.textColor = .blue
case 1: cell.label.text = "1"
case 2: cell.label.text = "2"
case 3: cell.label.text = "3"
case 4: cell.label.text = "4"
case 5: cell.label.text = "5"
default: cell.label.text = "6"
我已将默认颜色浅灰色设置为标签。 但是如果我将案例 0 设置为蓝色,案例 0 和 5 将显示为蓝色。 我将案例 1 设置为蓝色,案例 1 和 4 将显示为蓝色。
【问题讨论】:
在其他每种情况下将颜色设置为浅灰色。否则出队将创建多个相同的单元格。 【参考方案1】:这是因为UICollectionView
有一种机制可以重用单元格的实例。所以这就是为什么你应该在每种情况下处理cell.label.textColor
。否则,无论何时调用 cellForItemAt indexPath
委托,它将是无法控制的。请尝试:
switch indexPath.row
case 0:
cell.label.text = "0"
cell.label.textColor = .blue
case 1:
cell.label.text = "1"
cell.label.textColor = .red
case 2:
cell.label.text = "2"
cell.label.textColor = .orange
case 3:
cell.label.text = "3"
cell.label.textColor = .purple
case 4:
cell.label.text = "4"
cell.label.textColor = .blue
case 5:
cell.label.text = "5"
cell.label.textColor = .blue
default:
cell.label.text = "6"
cell.label.textColor = .blue
【讨论】:
【参考方案2】:如果您想先使用默认颜色,则在开始切换案例之前设置标签默认颜色。在switch
的情况下,您可以根据条件更新颜色。
像这样:
cell.label.textColor = .ligthGray
switch indexPath.row
case 0: cell.label.text = "0"
cell.label.textColor = .blue
case 1: cell.label.text = "1"
case 2: cell.label.text = "2"
case 3: cell.label.text = "3"
case 4: cell.label.text = "4"
case 5: cell.label.text = "5"
default: cell.label.text = "6"
在这种情况下,只有0
索引标签将是blue
颜色,其他标签将是lightGray
【讨论】:
以上是关于Swift CollectionView 显示错误的主要内容,如果未能解决你的问题,请参考以下文章
Swift,CollectionView,致命错误:索引超出范围
Swift:如何以编程方式在 TableViewCell 中显示 CollectionView
Swift - 创建没有 Storyboard initWithFrame 错误的 collectionView
Swift:如何在 TableView 内的 CollectionView 中显示解析的 JSON 数据?