在屏幕外时更新CollectionViewSupplementaryView标头

时间:2018-09-28 22:33:45

标签: swift uicollectionview header instagram supplementary

我的观点类似于Instagram的主要故事提要。我在顶部有一个水平集合视图,在其中有一个SupplementaryView头单元格,该单元格看起来相同,但与其余单元格的行为不同。

我正在尝试通过以下代码更新我在增补视图中的对象...

@objc func uploadCompleted() {

    DispatchQueue.main.async {
        self.collectionView.performBatchUpdates({
            if let myCell = self.collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: 0)) as? MyCollectionReusableView {
                // Do your stuff here
                myCell.nameLbl.textColor = .black
                ...
            }
        }, completion: nil)
    }
}

在查看单元格时此方法工作正常,但是在此调用过程中将其从屏幕上滑出时不会更新。

有关如何解决此问题的任何想法?或者是一种更好的方法,它只更新集合视图中的第一个单元格,而不更新其余的单元格。

谢谢

1 个答案:

答案 0 :(得分:0)

可见时,标题不是nil

var color = UIColor.red

viewForSupplementaryElementOfKind

func collectionView(_ collectionView: UICollectionView, 
     viewForSupplementaryElementOfKind kind: String, 
                      at indexPath: IndexPath) -> UICollectionReusableView 
   let  myCell = //
   myCell.nameLbl.textColor = color
   return myCell
}

然后在标题再次出现后更改color的位置和时间,将其更改为最新的颜色

@objc func uploadCompleted() {

    DispatchQueue.main.async {
        self.color = UIColor.black
        self.collectionView.performBatchUpdates({
            if let myCell = self.collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: 0)) as? MyCollectionReusableView {
                // Do your stuff here
                myCell.nameLbl.textColor = self.color
                ...
            }
        }, completion: nil)
    }
}