如何在UICollectionView中显示多个部分

时间:2017-01-30 06:03:24

标签: swift swift3 uicollectionview uicollectionviewcell

集合视图仅显示第一部分,但不显示第二部分。

以下是代表

private func numberOfSectionsInCollectionView(collectionView: UICollectionView!) -> Int {
    return 2
}

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

    var returnValue = Int()

    if section == 0 {
        returnValue = 1

    } else if section == 1 {
        returnValue = self.section1DataSource.count

    }

    return returnValue

}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    var cell = UICollectionViewCell()

    let cellA:GroupPhoto = collectionView.dequeueReusableCell(withReuseIdentifier: "groupPhotoCard", for: indexPath) as! GroupPhoto
    let cellB:AddFriendCell = collectionView.dequeueReusableCell(withReuseIdentifier: "addFriendCard", for: indexPath) as! AddFriendCell

    let section = indexPath.section

    if section == 0 {

        cell = cellA

    //end of section 0
    } else if section == 1 {
        cell = cellB
    }

    return cell
}

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

    var returnValue = CGSize()

    if indexPath.section == 0 {

        returnValue = CGSize(width: collectionView.frame.size.width, height: collectionView.frame.size.height / 3.0 - 8)

    } else if indexPath.section == 1 {
        returnValue = CGSize(width: collectionView.frame.size.width / 2.9 - 8, height: collectionView.frame.size.height / 2.9 - 8)
    }

    return returnValue
}

当我交换条件时,第一部分的单元格将被分配给第二部分。它工作正常,但它仍然只显示第一部分而不是第二部分。

2 个答案:

答案 0 :(得分:7)

Swift 3中numberOfSections(in:)的签名已更改,应该是这样的。

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

答案 1 :(得分:2)

在swift 3中, numberOfSectionsInCollectionView 更改为 numberOfSections(in:)

为避免这种情况,您应该添加 UICollectionViewDataSource ,以实现自动完成功能。