我真的不知道为什么我的 collectionViewCell 消失了

I really don't know why my collectionViewCell disappear

我制作了一个日历,所以首先我制作了一个这样的数组 [0,0,0,0,1,2,3,4,...,31] by thing.optimize(month: 5 ).在这个数组中,我在 1,2,3,...,31 前面加上 0 的原因是 当我制作单元格时,我使用 if 语句所以 if cell.text == 0 然后我设置 cell.isHidden = true。 当我 select 一个单元格时,我重新加载两个 collectionView(collectionView,nextMonthCollectionView) 并制作圆形红色。 当我select另一个按钮时,出现问题, 突然细胞消失了。我添加了一张照片。

首先,这是我的代码。

    import UIKit

    class ViewController: UIViewController {

    @IBOutlet weak var nowMonthName: UILabel!
    @IBOutlet weak var nextMonthName: UILabel!

    @IBOutlet weak var collectionView: UICollectionView!
    @IBOutlet weak var nextMonthCollectionView: UICollectionView!
    var thing = realOptimaize()
    var selectedIndex : IndexPath?
    var items = [UIBarButtonItem]()
    var forCollectionViewCount : Int?
    var monthData : Array<Int>?
    var nextMonthData : Array<Int>?

    override func viewDidLoad() {
         monthData = thing.optimaize(month: 5)
         nextMonthData = thing.optimaize(month: 6)

        self.title = String(CalenderBrain.init().curruntYear)
        nowMonthName.text = String(CalenderBrain.init().curruntMonthName())
        nextMonthName.text = String(CalenderBrain.init().nextMonthName())

        self.collectionView.dataSource = self
        self.collectionView.delegate = self
        self.nextMonthCollectionView.dataSource = self
        self.nextMonthCollectionView.delegate = self

        self.collectionView.register(UINib(nibName: "CollectionViewCell", bundle: nil), forCellWithReuseIdentifier : "MyCell")
        self.nextMonthCollectionView.register(UINib(nibName: "NextMonthCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "MyCell2")

        //이해가 잘 안가는 부분!!!
        if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout{
            layout.minimumInteritemSpacing = -0.2
        }
        if let layout2 = self.nextMonthCollectionView.collectionViewLayout as? UICollectionViewFlowLayout{
            layout2.minimumInteritemSpacing = -0.2
        }

    }

    }


    `extension ViewController : UICollectionViewDataSource, UICollectionViewDelegate,` UICollectionViewDelegateFlowLayout {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        if collectionView == self.nextMonthCollectionView {
            forCollectionViewCount = nextMonthData!.count
            return forCollectionViewCount!
        } else {
            forCollectionViewCount = monthData!.count
            return forCollectionViewCount!
        }
    }


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { if collectionView == self.nextMonthCollectionView{
        let forCollectionViewCell = nextMonthCollectionView.dequeueReusableCell(withReuseIdentifier: "MyCell2", for: indexPath) as! NextMonthCollectionViewCell
//        forCollectionViewCell.button.tag = indexPath.item
        if nextMonthData![indexPath.row] == 0 {
            forCollectionViewCell.isHidden = true
        } else {
            forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
            }
            return forCollectionViewCell
        } else {

        let forCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! CollectionViewCell
//        forCollectionViewCell.button.tag = indexPath.item + 100
        if monthData![indexPath.row] == 0 {
            forCollectionViewCell.isHidden = true
        } else {
            forCollectionViewCell.Label.text = String(monthData![indexPath.row])
        }
        return forCollectionViewCell

        }
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        if collectionView == nextMonthCollectionView {
            return .init(width: 53.25  , height: 67)
        } else{
            return .init(width: 53.25  , height: 67)
        }
    }

     func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        if collectionView == self.nextMonthCollectionView {
            let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! NextMonthCollectionViewCell
            self.collectionView.reloadData()
            collectionView.reloadData()
            forCollectionViewCell.Label.textColor = .white
            forCollectionViewCell.Label2.backgroundColor = .red
            forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
            forCollectionViewCell.Label2.clipsToBounds = true
        }else{
            let forCollectionViewCell = collectionView.cellForItem(at: indexPath) as! CollectionViewCell
            self.nextMonthCollectionView.reloadData()
            collectionView.reloadData()
            forCollectionViewCell.Label.textColor = .white
            forCollectionViewCell.Label2.backgroundColor = .red
            forCollectionViewCell.Label2.layer.cornerRadius = 0.5 * forCollectionViewCell.Label2.bounds.size.width
            forCollectionViewCell.Label2.clipsToBounds = true
        }
    }
}

这是我的照片。这第一张照片是在我按下任何单元格之前。 enter image description here

这第二张照片是我按下 13cell 后的照片。 我真的不知道为什么会这样。 我搜索 google 寻找此信息,但没有找到答案。

enter image description here

ps) 当我不使用 reloadData() 函数时..我没有收到错误..但是 我必须使用 reloadData.. 因为我必须清理我的 collectionView,然后制作一个新的 selected 单元格圆形红色单元格。

`if nextMonthData![indexPath.row] == 0 {
            forCollectionViewCell.isHidden = true
        } else {
            forCollectionViewCell.isHidden =false
            forCollectionViewCell.Label.text = String(nextMonthData![indexPath.row])
            }
            return forCollectionViewCell
    }

`

设置其他条件将解决您的问题。 其背后的原因是当集合视图出队单元格可能是该单元格已经隐藏,这就是它消失的原因。