gpt4 book ai didi

ios - 如何在 Collection View 中合并两个不同的部分

转载 作者:行者123 更新时间:2023-11-28 05:57:47 25 4
gpt4 key购买 nike

我想合并分别使用两个不同单元格(cellA 和 cellB)的两个不同部分。使用以下代码,我可以获得包含两个部分的 Collection View 。

import UIKit

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource{

@IBOutlet var testCollectionView: UICollectionView!

override func viewDidLoad() {
super.viewDidLoad()
self.testCollectionView.delegate = self
self.testCollectionView.dataSource = self
}

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

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if section == 0 {
return 3
} else {
return 1
}
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.section == 0 {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "taskCell", for: indexPath) as! CellA
cell.layer.cornerRadius = 2
cell.layer.shadowColor = UIColor(red:0.82, green:0.82, blue:0.82, alpha:1.0).cgColor
cell.layer.shadowOffset = CGSize.zero
cell.layer.shadowOpacity = 1
cell.layer.shadowRadius = 4
cell.layer.masksToBounds = false
return cell
} else {
let cell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "addNewCell", for: indexPath) as! CellB
return cell2
}
}
}

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

let width = testCollectionView.bounds.width/2 - 30
let height = width

return CGSize(width: width, height: height)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(30, 20, 10, 20)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 20
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.row)
}
}

输出看起来像这样。

enter image description here

现在,我希望将部分 1(CellB) 与部分 0(CellA) 合并。像这样。

enter image description here

我找不到实现此目的的解决方案。任何帮助将不胜感激。

最佳答案

您可以通过以下更改在同一部分中显示两种单元格类型:

  1. aCellsbCells 的数量添加属性。这比在您的代码中放置魔数(Magic Number) 31 更好,因为它记录了数字代表的内容。如果您需要更改它们,可以在一处进行更改。
  2. 更改 numberOfSections 以返回 1
  3. 更改 numberOfItemsInSection 以返回 A 单元格数和 B 单元格数的总和:return aCells + bCells
  4. cellForItemAt 中,将 indexPath.itemaCells 进行比较,以确定何时切换到 B 单元格。

var aCells = 3
var bCells = 1

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

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return aCells + bCells
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.item < aCells {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "taskCell", for: indexPath) as! CellA
cell.layer.cornerRadius = 2
cell.layer.shadowColor = UIColor(red:0.82, green:0.82, blue:0.82, alpha:1.0).cgColor
cell.layer.shadowOffset = CGSize.zero
cell.layer.shadowOpacity = 1
cell.layer.shadowRadius = 4
cell.layer.masksToBounds = false
return cell
} else {
let cell2 = collectionView.dequeueReusableCell(withReuseIdentifier: "addNewCell", for: indexPath) as! CellB
return cell2
}
}

关于ios - 如何在 Collection View 中合并两个不同的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com