具有动态大小的渐变背景UICollectionViewCell

时间:2019-02-26 11:34:01

标签: swift uicollectionview uicollectionviewcell gradient

我有一个水平的UICollectionView,其中的单元格具有基于内容的高度。这个高度可能会改变。

这些单元格可能具有渐变背景。目前,渐变是通过以下方式应用的:

class PunchCardCollectionViewCell: UICollectionViewCell {

    @IBOutlet var containerView:    UIView!
    var gradientLayer:              CAGradientLayer?

    override func awakeFromNib() {
        super.awakeFromNib()

        backgroundColor                 = UIColor.clear
        containerView.backgroundColor   = UIColor.white

        StylingHandler.addRoundCorners(containerView, radius: 8.0)
    }

    override func layoutSubviews() {
        super.layoutSubviews()

        gradientLayer?.frame = bounds
        setGradient(offer?.type != .uncharged)
    }

    private func setGradient(_ gradient: Bool = true) {
        if !gradient {
            gradientLayer?.removeFromSuperlayer()
        } else {
            if gradientLayer == nil {
                let gradient                = ColorClass.rewardGradient()
                gradientLayer               = CAGradientLayer()
                gradientLayer!.colors       = [gradient.leftColor, gradient.rightColor]
                gradientLayer!.startPoint   = gradient.startPoint
                gradientLayer!.endPoint     = gradient.endPoint
                gradientLayer!.locations    = [0, 1]
                gradientLayer!.frame        = containerView.bounds
                gradientLayer?.cornerRadius = 8.0
            }

            containerView.layer.insertSublayer(gradientLayer!, at: 0)
        }
    }
}

我现在遇到的问题是,有时渐变没有圆角,这可能是因为渐变的大小太大而无法看到圆角。 同样,当将渐变应用于一个单元时(状态更改时),另一单元上的渐变可能会移动(高度变小并恢复到原来的水平)。

我想我在重复使用单元格方面做错了。

有什么想法吗?

0 个答案:

没有答案