在UITableViewCell中使用时,CAGradientLayer在UIView上溢出

时间:2018-03-30 08:28:47

标签: ios swift uitableview cagradientlayer

我已将CAGradientLayer添加到已UIView内的UITableViewCell。此UIView距离trailing leading有20 UITableViewCellcontentView个空格。但是UIView在运行时会溢出。

var gradientLayer: CAGradientLayer!

@IBOutlet weak var view: UIView!

    func createGradientLayer() {
        gradientLayer = CAGradientLayer.init(layer: view.layer)
        gradientLayer.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)
        //        gradientLayer.frame = CGRect(x: 0, y: 0, width: self.contentView.frame.size.width, height: )

        let colory: UIColor = UIColor(red: 0, green: 189/255, blue: 237/255, alpha: 1.0)

        gradientLayer.colors = [UIColor.ceruleanBlue.cgColor, colory.cgColor]

        gradientLayer.startPoint = CGPoint.init(x: 0.0, y: 0.5)
        gradientLayer.endPoint = CGPoint(x:1.0,y: 0.5)

//        self.view.layer.mask = gradientLayer
        self.view.layer.insertSublayer(gradientLayer, at: 0)
    }

然后在cellForRow方法中,我这样使用:

if indexPath.row == 0{
            let cell = tableView.dequeueReusableCell(withIdentifier: "statisticsCell") as! StatisticsCommentCell

//            cell.frame.size.width = UIScreen.main.bounds.size.width
            cell.view.translatesAutoresizingMaskIntoConstraints = false
            return cell
        }

如果我更改了gradientLayer.frame,如下所示:

gradientLayer.frame.size.width = self.view.frame.width

gradientView没有溢出,但似乎只有ceruleanBlue颜色。

我不知道如何为UIView解决此问题。

有什么想法吗?提前致谢。

它是模拟器中有溢出问题的截图:

提示:通常情况UIView已经从UITableViewCell的{​​{1}}开始追踪和领先。

enter image description here

另一个问题是当我添加maskToBounds时,视图如下所示

enter image description here

contentView

的所有约束

enter image description here

1 个答案:

答案 0 :(得分:2)

将gradientLayer设置为可选,而不是var gradientLayer: CAGradientLayer!使用var gradientLayer: CAGradientLayer?并在cellLayoutSubViews方法中添加此代码

使用此代码

override func layoutSubviews() {
    super.layoutSubviews()
    if(self.gradientLayer == nil){
    self.gradientLayer = CAGradientLayer(layer: self.view.layer)
    //your gradient configuration
    self.layer.addSublayer(self.gradientLayer!)
    }
    self.gradientLayer?.drawsAsynchronously = true
    self.gradientLayer?.frame = self.view.bounds
}