gpt4 book ai didi

ios - UICollectionView 重新加载数据导致图形故障

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

我正在尝试制作一个自定义颜色选择器。左边的颜色是选择的颜色,其他颜色是其他选项。但是,当我 reloadData() 时,collectionView 边缘的一个单元格将在这个新单元格下方有一个前一个单元格。

我尝试制作自定义 collectionViewCell,然后将 View 添加到默认的 UICollectionViewCell。我尝试通过对 View 应用阴影影响来诊断问题,这就是我知道单元格彼此堆叠的方式。以前,我通过在 Storyboard中制作原型(prototype)单元来对 collectionView 进行编码,但是对于我想要的功能,我无法做到这一点。

这是 cellForItemAtIndexPath 以及重新加载 Collection View 时的代码。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = self.dequeueReusableCell(withReuseIdentifier: "colorCell", for: indexPath)
var color = UIColor.white
if colors.count == 0{
color = UIColor(red: CGFloat(mainManager.colors[indexPath.row][0] ), green: CGFloat(mainManager.colors[indexPath.row][1] ), blue: CGFloat(mainManager.colors[indexPath.row][2] ), alpha: 1.0)
}
else{
color = UIColor(red: CGFloat((colors[indexPath.row][0] ) ), green: CGFloat((colors[indexPath.row][1] ) ), blue: CGFloat((colors[indexPath.row][2] ) ), alpha: 1.0)
}
if indexPath.row == 0{
let cellView = UIView()
cell.addSubview(cellView)
cellView.translatesAutoresizingMaskIntoConstraints = false
cellView.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
cellView.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true
cellView.widthAnchor.constraint(equalTo: cell.widthAnchor, multiplier: 0.8).isActive = true
cellView.heightAnchor.constraint(equalTo: cell.heightAnchor, multiplier: 0.8).isActive = true
cellView.roundEdgesAndShadow()
cellView.backgroundColor = color
}
else{
let centerView = UIView()
cell.addSubview(centerView)
centerView.translatesAutoresizingMaskIntoConstraints = false
centerView.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true
centerView.centerYAnchor.constraint(equalTo: cell.centerYAnchor).isActive = true
centerView.widthAnchor.constraint(equalTo: cell.widthAnchor, multiplier: 0.4).isActive = true
centerView.heightAnchor.constraint(equalTo: cell.heightAnchor, multiplier: 0.4).isActive = true
centerView.roundEdgesAndShadow()
centerView.backgroundColor = color
}
return cell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if colors.count == 0{
colors = mainManager.colors.sorted(by: { (a, b) -> Bool in
if a == mainManager.colors[indexPath.row]{
return true
}
else{
return false
}
})
}
else{
colors = mainManager.colors.sorted(by: { (a, b) -> Bool in
if a == self.colors[indexPath.row] {
return true
}
else{
return false
}
})
}
self.reloadData()
}

最佳答案

由于您要动态地将 View 添加到单元格中,因此在重用的情况下,它们会多次添加到同一单元格中。在 Collection View 单元格的 prepareForReuse 中删除其所有 subview 。

关于ios - UICollectionView 重新加载数据导致图形故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55551879/

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