gpt4 book ai didi

ios - UICollectionView 接收到具有不存在的索引路径的单元格的布局属性

转载 作者:行者123 更新时间:2023-11-29 11:40:30 25 4
gpt4 key购买 nike

我使用了两个名为cltnEditscltnTools 的 Collection View ,我默认显示cltnTools。当用户单击 cltnTools 的任何项目时,将出现 cltnEdits Collection View ,否则它将被隐藏。 cltnEdits 有一个取消按钮,每当用户单击该取消按钮时,cltnEdits 就会消失(隐藏)并出现 cltnTools

我的两个 Collection View 都在 UIStackView 中

从 Collection View 中选择名称为 cltnTools 的元素时出现以下错误。

enter image description here

我已尝试使用以下代码来解决此错误,但它对我不起作用

            cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

cltnTools.reloadData()
cltnTools.collectionViewLayout.invalidateLayout()
cltnTools.layoutSubviews()

也试过了

override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()

cltnEdits.collectionViewLayout.invalidateLayout()
}

并添加了这个UICollectionViewDelegateFlowLayout委托(delegate)

func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}

以下是我的didSelect方法cltnTools

   func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

if collectionView == cltnTools {

selectedItem.push(item: "CltnTools")

switch indexPath.row {

case 0:

//Edits

arrImage = arrEditToolsImage
arrText = arrEditToolsText

selectedItem.push(item: arrMainToolsText[indexPath.row])

viewCrop.image = imgImage.image

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()

break

case 1:

//Effect

selectedItem.push(item: arrMainToolsText[indexPath.row])

arrImage = arrEffectToolsImage
arrText = arrEffectToolsText

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()

break

case 2:

//Colors

selectedItem.push(item: arrMainToolsText[indexPath.row])

arrImage = arrColorToolsImage

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()

break

case 3:

//Text

selectedItem.push(item: arrMainToolsText[indexPath.row])

arrImage = arrTextToolsImage
arrText = arrTextToolsText

imgImage.addLabel()

//Modify the Label
imgImage.textColor = UIColor.black
imgImage.textAlpha = 1
imgImage.currentlyEditingLabel.closeView!.image = #imageLiteral(resourceName: "Delete")
imgImage.currentlyEditingLabel.rotateView?.image = #imageLiteral(resourceName: "Resize")
imgImage.currentlyEditingLabel.border?.strokeColor = UIColor.black.cgColor

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()


break

case 4:

//Frame

selectedItem.push(item: arrMainToolsText[indexPath.row])

print("Frame \(arrFrameToolsImage.count)")

arrImage = arrFrameToolsImage

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()

break

case 5:

//Goodies

selectedItem.push(item: arrMainToolsText[indexPath.row])

arrImage = arrGoodiesToolsImage

print("Goodies \(arrGoodiesToolsImage.count)")

cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()

toolsToEdits()

break

default:
break

}

}

我该如何解决我的错误?有人请帮忙!

注意:在将其标记为重复之前,请检查我的代码,我已经尝试了堆栈中其他问题中给出的所有解决方案。

最佳答案

尝试交换 reloadData()invalidateLayout(),另外不要直接调用 layoutSubviews(参见 docs)

cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.reloadData()
cltnEdits.setNeedsLayout()
cltnEdits.layoutIfNeeded()


cltnTools.collectionViewLayout.invalidateLayout()
cltnTools.reloadData()
cltnTools.setNeedsLayout()
cltnTools.layoutIfNeeded()

关于ios - UICollectionView 接收到具有不存在的索引路径的单元格的布局属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46903770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com