Swift:具有动态和静态单元格的 UICollectionView

Swift: UICollectionView with dynamic and static cell

我从一个数组中创建了一些 collectionviewcell。我想要的是位于所有这些单元格末尾的静态单元格。

所以不管我添加了多少个单元格,这个特定的单元格都停留在最后

此外,如果无法做到这一点,您有什么想法可以完成我正在尝试的事情

非常感谢。我非常感谢您提供的任何答案

是的,这绝对是可能的。我的首选方法是在集合视图中使用两个单独的部分:

func numberOfSections() -> Int { 
    return 2
}


func numberOfItemsInSection(_ section: Int) -> Int {
    if section == 0 {
        return array.count
    } else if section == 1 { 
        return 1
    } else {
        return 0
    }
}


func cellForItemAtIndexPath(_ indexPath: NSIndexPath) -> UICollectionViewCell? {
    if indexPath.section == 0 {
      // set up the standard cell, using the data from the army
    } else if indexPath.section == 1 {
      //set up the "+" cell
    }
}

实现相同目标的另一种方法是只使用一个部分,将集合视图的大小声明为数组大小 + 1,然后在cellForItemAtIndexPath 方法,但你会发现它会导致额外的数学运算变得更加复杂。如果可能的话,让单元格在不同的部分使用不同的数据通常更安全

是的,这绝对有可能。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 中,您应该总是 return 比您拥有的物品数量多 1。

func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 中,您应该检查 indexPath.row 是否等于您拥有的项目数。如果是,请将该特定单元格配置为具有 + 号。

以下常见错误

请确保您不会为最后一个单元格调用访问用于标记的同一数组。

例如,如果您的标签数组如下所示:

var myItems = ["Tag1", "Tag2", "Tag3"]

那么下面的代码是错误的:

var titleToDisplayOnCell = myItems[indexPath.row] // Don't do this!

这是因为对于应该显示 + 号的单元格,行是 3 并且 myItems[3] 没有对象 -- 这超出了数组的范围,数组范围是 0 到 2(含)。