我正在使用带有自定义布局的UICollectionView
,但在向下滚动和备份后,我遇到了细胞消失的问题。
请参阅我的问题的video demonstration。
我已经做了一些谷歌搜索,其他人有相关的问题,我认识到这可能是由于细胞重用,但我在别处找到的答案都没有帮助我。
所以我的问题是:
为什么会这样?
如何阻止这种情况发生?
有趣的是,一旦我提出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
答案 0 :(得分:1)
想出来。因此导致问题的代码行实际上在viewDidAppear
中,它是:
inputTextView?.becomeFirstResponder()
我不知道为什么它会导致单元格不显示,但删除该行可以解决问题。
答案 1 :(得分:0)
这可能与您将输入视图分配给变量这一事实有关。通常我只是将输入视图中的文本存储在变量中,而不是将变量指向textview本身。您可以更改为该行为并查看它是否发生更改,或者只是简单地将输入视图的部分注释掉,然后查看它是否发生了变化。