我怎样才能为sizeForItemAt设置一个集合视图?

时间:2016-12-28 11:26:59

标签: ios swift uicollectionview swift3 uicollectionviewcell

我有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

        }

对于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)
        }

    }

2 个答案:

答案 0 :(得分:5)

很简单,对于第二个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
    }
}

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
}

注意:您需要在dataSource的所有delegatecollectionView方法中加入此类条件,以区分两个collectionView

答案 1 :(得分:1)

见Cristan,

menuCollectionView?.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

上述方法用于设置两个单元格之间的空间。

和 下面的方法collectionViewLayout用于设置单元格宽度和高度

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 CGSize(width: 100, height: 100)  
    }  
}

如果要为两个集合视图处理不同的单元格,请检查

how to use two CollectionView on same view controller