滚动后为什么我的UICollectionViewCells会消失?

时间:2017-06-19 18:48:28

标签: ios swift uicollectionview uicollectionviewcell uicollectionviewlayout

我正在使用带有自定义布局的UICollectionView,但在向下滚动和备份后,我遇到了细胞消失的问题。

请参阅我的问题的video demonstration

我已经做了一些谷歌搜索,其他人有相关的问题,我认识到这可能是由于细胞重用,但我在别处找到的答案都没有帮助我。

所以我的问题是:

  1. 为什么会这样?

  2. 如何阻止这种情况发生?

  3. 有趣的是,一旦我提出UIViewController并将其解雇,问题就不再发生了。请参阅此版本的video

    注意:此错误已存在一段时间(至少从iOS 10开始,并且还没有在iOS 11 beta 1中修复)。

    编辑1

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        switch (indexPath as NSIndexPath).row {
        case 0:
            // Speak Logo Cell
            let speakLogoCell = collectionView.dequeueReusableCell(withReuseIdentifier: "SpeakLogoCell", for: indexPath) as! SpeakLogoCell
    
            recordButton = speakLogoCell.recordButton
    
            return speakLogoCell
        case 1:
            // Text Input Cell
            let inputCell = collectionView.dequeueReusableCell(withReuseIdentifier: "InputCell", for: indexPath) as! InputCell
    
            inputCell.inputTextView.delegate = self
            inputTextView = inputCell.inputTextView
    
            // Only restore input if launching and required.
            if currentlyLaunching && UserDefaultsHelper.loadShouldRestoreInput() {
                inputTextView!.text = UserDefaultsHelper.loadInput() ?? ""
            }
    
            return inputCell
        case 2:... // Continues for all the other cells
    

2 个答案:

答案 0 :(得分:1)

想出来。因此导致问题的代码行实际上在viewDidAppear中,它是:

inputTextView?.becomeFirstResponder()

我不知道为什么它会导致单元格不显示,但删除该行可以解决问题。

答案 1 :(得分:0)

这可能与您将输入视图分配给变量这一事实有关。通常我只是将输入视图中的文本存储在变量中,而不是将变量指向textview本身。您可以更改为该行为并查看它是否发生更改,或者只是简单地将输入视图的部分注释掉,然后查看它是否发生了变化。