如果您使用普通的UITableViewCell:
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100.0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath)
// ...
let gradient = CAGradientLayer()
gradient.frame = cell.contentView.frame
gradient.colors = [UIColor.blue.cgColor, UIColor.yellow.cgColor]
gradient.locations = [0.0, 1.0]
cell.contentView.layer.insertSublayer(gradient, at: 0)
// ...
return cell
}
您需要确保将渐变添加到 contentView 的图层。
这会很好用。
如果您使用自定义 UITableViewCell 类:
现在,如果您使用的是自定义单元格类,则需要覆盖layoutSubviews() 方法,如下所示:
override func layoutSubviews() {
super.layoutSubviews()
gradient.frame = contentView.frame
}
这可确保您的渐变框架在任何时候都与您的 contentView 框架相同。
您的自定义单元格类将如下所示:
class CustomTableCell: UITableViewCell {
lazy var gradient : CAGradientLayer = {
var gradient = CAGradientLayer()
gradient.colors = [UIColor.blue.cgColor, UIColor.yellow.cgColor]
gradient.locations = [0.0, 1.0]
self.contentView.layer.insertSublayer(gradient, at: 0)
return gradient
}()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// ...
}
override func layoutSubviews() {
super.layoutSubviews()
// ...
gradient.frame = contentView.frame
// ...
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// ...
}
}
如果您有任何其他问题,请告诉我!