CAGradientLayer 无法正常工作
CAGradientLayer is not working properly
我正在尝试创建一个具有渐变背景的 UITableViewCell。我不明白为什么,但是UITableView的右边有一个白色的空白space。我尝试设置纯色,但结果没有改变。
这是我的 UITableViewCell class。
class HomeTableViewCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let gl = CAGradientLayer()
gl.frame = self.bounds
//gl.colors = [UIColor.red.cgColor as CGColor, UIColor.red.cgColor as CGColor]
gl.backgroundColor = UIColor.blue.cgColor
self.layer.addSublayer(gl)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
它看起来像这样。 (蓝色的是 table 行)
这是怎么回事?如果我从 XCode 设置背景,它显示一切正常。它只是不适合屏幕尺寸。
问题是单元格以一种尺寸从笔尖出来,但后来在放入界面时调整了大小。但是您的图层添加的时间远早于调整单元格的大小,并且在调整单元格大小时,图层 not 调整大小。因此,图层最终以 错误的 尺寸结束。
此处的一个好方法是保留对渐变图层的引用并在 layoutSubviews
覆盖中调整图层大小:
class MyTableViewCell : UITableViewCell {
var gl : CAGradientLayer?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let gl = CAGradientLayer()
gl.frame = self.bounds
gl.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
gl.zPosition = -1
self.layer.addSublayer(gl)
self.gl = gl
}
override func layoutSubviews() {
super.layoutSubviews()
self.gl?.frame = self.bounds
}
}
我正在尝试创建一个具有渐变背景的 UITableViewCell。我不明白为什么,但是UITableView的右边有一个白色的空白space。我尝试设置纯色,但结果没有改变。
这是我的 UITableViewCell class。
class HomeTableViewCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let gl = CAGradientLayer()
gl.frame = self.bounds
//gl.colors = [UIColor.red.cgColor as CGColor, UIColor.red.cgColor as CGColor]
gl.backgroundColor = UIColor.blue.cgColor
self.layer.addSublayer(gl)
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
它看起来像这样。 (蓝色的是 table 行)
这是怎么回事?如果我从 XCode 设置背景,它显示一切正常。它只是不适合屏幕尺寸。
问题是单元格以一种尺寸从笔尖出来,但后来在放入界面时调整了大小。但是您的图层添加的时间远早于调整单元格的大小,并且在调整单元格大小时,图层 not 调整大小。因此,图层最终以 错误的 尺寸结束。
此处的一个好方法是保留对渐变图层的引用并在 layoutSubviews
覆盖中调整图层大小:
class MyTableViewCell : UITableViewCell {
var gl : CAGradientLayer?
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
let gl = CAGradientLayer()
gl.frame = self.bounds
gl.colors = [UIColor.red.cgColor, UIColor.blue.cgColor]
gl.zPosition = -1
self.layer.addSublayer(gl)
self.gl = gl
}
override func layoutSubviews() {
super.layoutSubviews()
self.gl?.frame = self.bounds
}
}