UICollectionViewCell,多个单元格大小,未设置为当前单元格大小设置的gradientView宽度,有时在滚动时会更改

时间:2018-07-05 13:11:36

标签: ios swift swift3 uicollectionview uicollectionviewcell

在这个班级中,我的单元格有2种尺寸,这给我带来了很多麻烦,因为我必须将底部渐变视图设置为该单元格。 当我第一次打开viewController时,所有东西都设置正确,但有时某些单元格中的渐变视图颜色看起来不一样,但是真正的问题始于您开始滚动时,底部渐变视图在大单元格中切成两半,正如您在下面的图像中看到的那样,gradientColors真的很让人迷惑,有些颜色实际上是底色,而有些颜色是淡黄色,这使单元格看起来不一样

我如何设置像元大小:

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)
} 

    }

enter image description here

1 个答案:

答案 0 :(得分:1)

由于单元的重复使用,您的gradient frame会在单元几何形状发生任何变化时过时。

在您的SearchProductsCell类中,以frame的{​​{1}}中的gradient的{​​{1}}:

override