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 数据?

Swift - AlamofireImage 下载多个 URL 并显示在 CollectionView 中

TableView 中的 CollectionView 显示 false Data swift