我已将CAGradientLayer添加到已UIView
内的UITableViewCell
。此UIView距离trailing
leading
有20 UITableViewCell
和contentView
个空格。但是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}}开始追踪和领先。
另一个问题是当我添加maskToBounds时,视图如下所示
contentView
答案 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
}