UICollectionView隐藏/阻止粘滞标题

时间:2017-08-16 06:46:19

标签: ios swift uicollectionview uicollectionviewlayout

我有一个带有粘性标题的集合视图

 flowLayout.sectionHeadersPinToVisibleBounds = true

我的问题是我的标题的上半部分是半透明的,当我向上滚动单元格时,我可以看到单元格在标题后滚动。

我想隐藏标题后面的单元格视图部分。在我附上的图片中,我不想看到红色背后的绿色。其余的行为我想保持原样。

我需要这个的原因是我在背面有一张壁纸图片,我需要显示

Sticky CollectionViewHeaders

@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
    super.viewDidLoad()
    self.collectionView.alwaysBounceVertical = true
    collectionView.register(UINib.init(nibName: EXAMPLE_CELL_REUSE_ID, bundle: nil), forCellWithReuseIdentifier: EXAMPLE_CELL_REUSE_ID)
    collectionView.register(UINib.init(nibName: EXAMPLE_HEADER_REUSE_ID, bundle: nil), forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: EXAMPLE_HEADER_REUSE_ID)

    if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
      flowLayout.headerReferenceSize = CGSize(width: 400, height: 100)
      flowLayout.sectionHeadersPinToVisibleBounds = true
  }
}




func numberOfSections(in collectionView: UICollectionView) -> Int {
    return sections.count;
 }

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 1 //self.sections[section].1;
}



func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let exampleCell = collectionView.dequeueReusableCell(withReuseIdentifier: EXAMPLE_CELL_REUSE_ID, for: indexPath) as! MyCellCollectionViewCell;

    exampleCell.headerLabel.text = "Cell"
    exampleCell.backgroundColor = UIColor.green

    return exampleCell;
}


func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    if kind == UICollectionElementKindSectionHeader {
      if let header = collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: EXAMPLE_HEADER_REUSE_ID, for: indexPath) as? ExampleHeader {
       //  header.backgroundColor = UIColor(red: 1.0, green: 0, blue: 0, alpha: 0.5)
        return header
      } else {
        return UICollectionReusableView()

      }
    }
    return UICollectionReusableView()
}

我认为这里的问题可能类似,但没有回复,并且不清楚它是否是同一个问题。 Transparent sticky header ui collectionview don't show cells underneath

3 个答案:

答案 0 :(得分:0)

我创建了一个非常简单的设置,就像你的一样,它工作正常。

class ViewController: UIViewController, UICollectionViewDataSource
{
    @IBOutlet weak var collectionView: UICollectionView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.collectionView.alwaysBounceVertical = true

        if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout
        {
            flowLayout.headerReferenceSize = CGSize(width: 400, height: 100)
            flowLayout.sectionHeadersPinToVisibleBounds = true
        }
    }

    func numberOfSections(in collectionView: UICollectionView) -> Int
    {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return 1
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
    {
        return collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
    }

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView
    {
        if kind == UICollectionElementKindSectionHeader
        {
            return collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "rview", for: indexPath)
        }
        return UICollectionReusableView()
    }
}

答案 1 :(得分:0)

这对我有用:

let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout
    layout.sectionHeadersPinToVisibleBounds = true
    layout.sectionInsetReference = .fromSafeArea
    view.backgroundColor = .white
    collectionView.anchor(top: view.safeAreaLayoutGuide.topAnchor, leading: 
    view.leadingAnchor, bottom: view.bottomAnchor, trailing: view.trailingAnchor)

答案 2 :(得分:0)

您需要为位于标题视图下的所有单元格应用掩码。在scrollViewDidScroll上使用

教程:https://medium.com/@peteliev/layer-masking-for-beginners-c18a0a10743