集合视图与下拉菜单

时间:2016-10-12 12:00:01

标签: swift uicollectionview

我希望创建一个下拉菜单,该菜单只显示在“季节性”空白时空白空白的位置。选项卡被选中并在“最新”选项卡时保持隐藏状态。选项卡已选中。

我如何实现这一目标?

viewController图片:

enter image description here

我必须使用UISearchDelegeate吗?

编辑:如何使collectionsView的headerView响应顶部的分段控制按钮:" Latest and Seasonal"?例如。什么时候"最新"如果选中,标题视图将调整为宽度:0,高度:0和"季节性"如果选中,标题将调整为宽度:320和高度:50?

这是一个例子,但到目前为止我的代码是错误的。我不确定如何返回CGSize。

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        if segmentedControlValue.selectedSegmentIndex == 1 {
            let size = CGSize (width: 0, height: 50)
        }
        if segmentedControlValue.selectedSegmentIndex == 0 {
            let size = CGSize (width: 0, height: 0)
        }
    }

    @IBAction func selectionButtons(_ sender: UISegmentedControl) {
        collectionView?.reloadData()

    }

这里是我刚添加的新代码:

override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let selectionCell = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "selectionCell", for: indexPath)

        if toggleState.currentTitle == "View" {
            selectionCell.frame = CGRect(x: 0, y: 0, width: 0, height: 100)
        }
        if toggleState.currentTitle == "NoView" {
            selectionCell.frame = CGRect(x: 0, y: 0, width: 0, height: 0)
        }
        return selectionCell

1 个答案:

答案 0 :(得分:1)

您可以使用collectionView viewForSupplementaryElementOfKind方法处理带有UICollectionElementKindSectionHeader标题的页眉和带有UICollectionElementKindSectionFooter种类视图的页脚。

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {
        let view = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "myHeaderView", forIndexPath: indexPath)
        // configure header view

        if segmentedControlValue.selectedSegmentIndex == 1 {
             view.frame = // set frame
        }
        if segmentedControlValue.selectedSegmentIndex == 0 {
             view.frame = // set frame
        }

        return view
}

因此,当您调用reloadData()方法时,这将作为执行的一部分,您可以对内部的view采取适当的操作。