web-dev-qa-db-ja.com

UICollectionViewで複数のセクションを表示する方法

コレクションビューには最初のセクションのみが表示され、2番目のセクションは表示されません。

ここに代表者がいます

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番目のセクションに割り当てられるように条件を交換するとき。正常に動作しますが、それでも最初のセクションのみが表示され、2番目のセクションは表示されません。

5
Chris Mikkelsen

numberOfSections(in:) の署名はSwift 3で変更されます。次のようになります。

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

In Swift 3、numberOfSectionsInCollectionViewnumberOfSections(in:)に変更されます

これを回避するには、オートコンプリートを実装するためにICollectionViewDataSourceを追加する必要があります。