我有这个集合视图,并且在根据它的索引绘制每一行时,我已经设置了它的颜色。它会显示每行的正确颜色,直到您向下滚动然后再向上移动。例如,如果按照R,G,B,R,G,B的顺序上下滚动一点点,它可能是G,G,R,B,R,B。我已经尝试将rasterize图层设置为true和false,但也没有运气。我不知道为什么会发生这种情况以及如何解决这个问题。因为我在cellForItemAt函数上设置颜色,并且每当再次绘制一行并且将行颜色基于颜色列表和该行的id时,它应该被调用它应该总是绘制相同的东西。
这是我的代码的一部分。
class MyCollectionViewController: UICollectionViewController {
//MARK: Properties
var list = [Item]()
var colors = [[String]]()
override func viewDidLoad() {
super.viewDidLoad()
self.refreshList(self)
colors.append(["#ff3e99","#ffa35a"])
colors.append(["#668dff","#ff53ff"])
colors.append(["#6ae0d7","#00d3ad"])
}
override func numberOfSections(in tableView: UICollectionView) -> Int {
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return list.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// Table view cells are reused and should be dequeued using a cell identifier.
let cellIdentifier = "xxxx"
guard let cell = self.collectionView?.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as? xxxxCell else {
fatalError("The dequeued cell is not an instance of xxxx.")
}
// Fetches the appropriate meal for the data source layout.
let item = list[indexPath.row]
style(cell: cell.rootView, index: item.id!)
return cell
}
func style(cell:LGButton, index: Int) {
cell.gradientStartColor = UIColor(hexString: colors[index % colors.count][0])
cell.gradientEndColor = UIColor(hexString: colors[index % colors.count][1])
cell.shadowColor = UIColor(hexString: colors[index % colors.count][0])
cell.shadowRadius = 8
cell.shadowOpacity = 0.8
}
}
答案 0 :(得分:0)
滚动时的问题让我觉得它是一个细胞重用问题。尝试在自定义xxxxCell prepareForReuse
中实施UICollectionViewCell
。重置属性,看看是否有帮助。
类似的东西:
override func prepareForReuse() {
super.prepareForReuse()
gradientStartColor = UIColor.clear
gradientEndColor = UIColor.clear
shadowColor = UIColor.clear
}
答案 1 :(得分:0)
我还没有使用过LGButton,但是看https://github.com/loregr/LGButton/blob/develop/LGButton/Classes/LGButton.swift,假设这是你正在使用的代码,一旦设置了渐变,你就无法改变它。因此,当您的单元格被重用时,即使您尝试重置style
函数中的渐变颜色,LGButton代码也不会遵循更改。
在上面的链接中,在第398行(截至本文撰写时),函数setupGradientBackground
的第一行检查变量gradient
是否为零,如果是,则设置{{1}这意味着当您更新渐变开始和结束颜色时,它将不会更改。我认为这是LGButton的一个缺陷 - 当你改变开始或结束颜色的值时,它应该重新计算渐变。
在我看来,您可以将渐变设置为nil以强制重新计算。您可能需要将所有值设置为nil,以便在设置完所有值之前不会重置渐变。
在下面的代码段中,我还将单元格参数重命名为gradient
,因此对它的调用不会产生误导 - 看起来像是在传递单元格而不是按钮。
button