У меня есть 2 размера для ячеек в этом классе, и это доставило мне массу неприятностей, так как я должен установить нижнюю градиентную видимость для ячейки.
Когда я впервые открываю viewController, все настраивается правильно, за исключением того, что иногда цвета градиентного вида не выглядят одинаково в некоторых ячейках, но настоящая проблема начинается, когда вы начинаете прокрутку, нижний градиентный вид разрезается пополам в больших ячейках и Градиент цвета очень запутался, как вы видите на изображении ниже, некоторые имеют очень темный цвет в качестве нижнего, а некоторые вместо этого имеют желтоватый цвет, из-за чего клетки не выглядят одинаково
Как настроить размер ячейки:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "SearchProductsCell", for: indexPath) as! SearchProductsCell
cell.configCell(data: data[indexPath.row])
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let smallCellSize : CGFloat = self.collectionView.frame.height / 2.11
let height = indexPath.row % 3 == 0 ? self.collectionView.frame.height : smallCellSize
return CGSize(width: height, height: height)
}
и это настройка класса ячейки:
class SearchProductsCell: UICollectionViewCell {
@IBOutlet weak var imageV: UIImageView!
@IBOutlet weak var titleLbl: UILabel!
@IBOutlet weak var gradientView: UIView!
var isGradientAdded = false
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func prepareForReuse() {
super.prepareForReuse()
}
func configCell(data : Product_Data ) {
let img = data.image == "" ? data.thumb : data.image
imageV.setupApiImage(imagePath: img)
titleLbl.text = data.name
if isGradientAdded == false {
addGradient()
isGradientAdded = true
}
}
func addGradient () {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
let topColor = UIColor.yellow
let botomColor = UIColor.red
gradient.colors = [topColor.cgColor, botomColor.cgColor]
gradientView.layer.insertSublayer(gradient, at: 0)
}
}