在 UITableViewCell 中使用时,CAGradientLayer 在 UIView 上溢出
CAGradientLayer overflows on UIView when using in UITableViewCell
我已经将 CAGradientLayer 添加到已经在 UITableViewCell
中的 UIView
。这个UIView有20个trailing
和leading
space来自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
的 contentView
的尾部和前导。
另一个问题是当我添加 maskToBounds 时,视图如下所示
UIView
的所有约束
将您的 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
}
我已经将 CAGradientLayer 添加到已经在 UITableViewCell
中的 UIView
。这个UIView有20个trailing
和leading
space来自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
的 contentView
的尾部和前导。
另一个问题是当我添加 maskToBounds 时,视图如下所示
UIView
将您的 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
}