向下滚动时 UICollectionView 的 indexPath 发生变化

Posted

技术标签:

【中文标题】向下滚动时 UICollectionView 的 indexPath 发生变化【英文标题】:indexPath of UICollectionView change when I scroll down 【发布时间】:2020-04-18 14:43:05 【问题描述】:

我有简单的 CollectionView,我需要将索引 1 处的背景单元格设置为绿色,启动时可以(看图片)

但是在我向下和向后滚动后,我有很多绿色单元格? 我该怎么办?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell [enter image description here][1]
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MessageCollectionViewCell
    cell.textMessageLabel.text = arrMes[indexPath.row].textMessage
    cell.dataMessage.text = arrMes[indexPath.row].dataOfMessage

    if indexPath.row == 1 
        cell.backgroundColor = .green
    
    return cell

【问题讨论】:

【参考方案1】:

单元被重复使用 - 因此调用dequeueReusableCell()

因此,您需要将背景设置为默认颜色:

if indexPath.row == 1 
    cell.backgroundColor = .green
 else 
    cell.backgroundColor = .white // or whatever your "default" color should be


编辑 (评论后)

既然您正在显示“消息”......请考虑一个“聊天”应用程序。消息可能是“来自”某人或“给”某人。我假设您的数据已经知道这一点,因此您可以这样做:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MessageCollectionViewCell

    cell.textMessageLabel.text = arrMes[indexPath.row].textMessage
    cell.dataMessage.text = arrMes[indexPath.row].dataOfMessage

    if arrMes[indexPath.row].fromOrTo == "from" 
        cell.backgroundColor = .green
     else 
        cell.backgroundColor = .yellow
     

    return cell

【讨论】:

谢谢,但我的问题远不止于此。如果我需要为每个单元格设置独特的内容怎么办?你能帮帮我吗? @DonMag ,非常感谢,它有帮助)【参考方案2】:

当您向下滚动时,集合视图正在重用这些单元格,这就是为什么您可以看到更多带有绿色背景的单元格。要解决此问题,您需要为不在索引 1 处的其他单元格设置背景颜色。 因此,例如,您可以使用以下方法更新您的函数:

if indexPath.row == 1 
    cell.backgroundColor = .green
 else 
    cell.backgroundColor = .white // your desired color

或更短的可能性:

 cell.backgroundColor = indexPath.row == 1 ? .green : .white

【讨论】:

以上是关于向下滚动时 UICollectionView 的 indexPath 发生变化的主要内容,如果未能解决你的问题,请参考以下文章

向下滚动时 UICollectionView 的 indexPath 发生变化

UICollectionView 中的图像在向下滚动时会自动翻转?

带有插图的 UICollectionView 不会一直向下滚动

UICollectionView在滚动时重新加载错误的图像

UICollectionView 在重新加载数据时滚动不平滑

当有人滚动到 UICollectionView 的顶部时,如何调用方法?