如何仅为sizeForItemAt设置一个集合视图?

cri*_*ika 3 ios uicollectionview uicollectionviewcell swift swift3

我在ViewController哪里有两个,collectionView但我要一个isPagingEnabled用于单元格,另一个要collectionView 用于全帧宽度的花药3个项目。我怎样才能做到这一点 ?

用于分页的MenuCollectionView:完美运行

 func setupMenuCollection(){        
            if let flowLayout = menuCollectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
                flowLayout.scrollDirection = .horizontal
                flowLayout.minimumLineSpacing = 0
            }

            menuCollectionView?.backgroundColor = UIColor.white
            menuCollectionView?.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)
            menuCollectionView?.scrollIndicatorInsets = UIEdgeInsetsMake(50, 0, 0, 0)

            menuCollectionView?.isPagingEnabled = true

        }
Run Code Online (Sandbox Code Playgroud)

它用于manubarCollectionView:它不起作用,因为这里没有else语句。

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if manubarCollectionView == collectionView {

            return CGSize(width: view.frame.width / 3, height: manubarCollectionView.frame.height)
        }

    }
Run Code Online (Sandbox Code Playgroud)

Nir*_*v D 6

很简单,对于第二个collectionView单元格大小,可以添加else block并返回,CGSize也可以CGSize在之后直接返回if block

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if manubarCollectionView == collectionView {

        return CGSize(width: view.frame.width / 3, height: manubarCollectionView.frame.height)
    }
    else {
        //return cell size for menuCollectionView
        return collectionView.frame.size
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if manubarCollectionView == collectionView {

        return CGSize(width: view.frame.width / 3, height: manubarCollectionView.frame.height)
    }

    //return cell size for menuCollectionView
    return collectionView.frame.size
}
Run Code Online (Sandbox Code Playgroud)

注意:您需要将这种类型的条件全部放在dataSource和区分两个delegate方法中。collectionViewcollectionView