如何在swift中隐藏collectionview中的特定单元格

时间:2016-12-19 10:49:29

标签: ios swift swift3

在我的项目中,我有一个数组,我正在 collectionview

上加载
var dataSource = ["@", "@", "1", "2", "3", "4", "5", "6", "7", "8" , "9", "10", "@", "@"]

对于字符串“@”我想要隐藏该特定单元格。所以最初我试图使用indexpath,然后尝试检查我的数组位置是否得到值“@”。但是我无法正确隐藏它,因为其他一些单元格会在滚动中被更改

这就是我在 cellForItemAt 上所做的:

if dataSource[indexPath.row] == "@" {

            cell.contentView.isHidden = true
            cell.layer.borderColor = UIColor.white.cgColor

        }

要考虑横向滚动的事情,这是我的 sizeForItemAt

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


        return CGSize(width: (self.numberCollectionView?.bounds.size.width)!/5 - 3, height: (self.numberCollectionView?.bounds.size.width)!/5 - 3 )
    }

2 个答案:

答案 0 :(得分:5)

您正在重复使用该单元格,因此您还需要添加该条件的其他部分,以将isHidden设置为false并默认borderColor

if dataSource[indexPath.row] == "@" {

    cell.contentView.isHidden = true
    cell.layer.borderColor = UIColor.white.cgColor
}
else {
    cell.contentView.isHidden = false
    cell.layer.borderColor = UIColor.black.cgColor //Set Default color here
}

此外,如果您不想向单元格显示为什么不使用filter从阵列中删除该元素。

dataSource = dataSource.filter { $0 != "@" }

现在只需重新加载collectionView

答案 1 :(得分:5)

只有通过过滤dataSource数组,才能彻底清除那些单元格。

    var filtered = dataSource.filter { (item) -> Bool in
       item != "@"
    }

并使用此过滤后的数组而不是源。