我使用了两个集合视图,名称是cltnEdits
和cltnTools
,我默认显示cltnTools
。当用户点击cltnTools
的任何项目时,会出现cltnEdits
集合视图,否则它将被隐藏。有一个取消按钮与cltnEdits
,每当用户点击取消按钮cltnEdits
消失(隐藏)和cltnTools
出现。
我的两个Collection视图都在UIStackView中
从集合视图中选择元素时,我收到以下错误,其名称为cltnTools
。
我尝试了以下代码来解决此错误,但它不适合我
cltnEdits.reloadData()
cltnEdits.collectionViewLayout.invalidateLayout()
cltnEdits.layoutSubviews()
cltnTools.reloadData()
cltnTools.collectionViewLayout.invalidateLayout()
cltnTools.layoutSubviews()
并试过这个
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
cltnEdits.collectionViewLayout.invalidateLayout()
}
并添加了这个UICollectionViewDelegateFlowLayout
代表
func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool {
return true
}
以下是我对cltnTools的didSelect方法
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()