将渐变图层添加到tableview

时间:2017-12-31 09:56:10

标签: ios swift uitableview cagradientlayer

我一直试图弄清楚如何在tableView中添加渐变图层,并尝试了很多不同的东西,但是我无法让表格视图细胞显示出来,无论有多少个带来的子视图或发送我的视图。

let gradientLayer = CAGradientLayer()

gradientLayer.frame = view.bounds

gradientLayer.colors = [UIColor(red: 125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0).cgColor, UIColor(red: 125/255.0, green: 125/255.0, blue: 255/255.0, alpha: 1.0).cgColor]

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

tableView.layer.addSublayer(gradientLayer)

无论带子视图和发送子视图的组合有多少,我似乎总是得到这个并且单元格不会出现在前面:

enter image description here

有没有人知道如何解决这个问题,或者如何做我想做的其他方式让它发挥作用?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:3)

创建背景视图并将其分配给TableView

func setGradientToTableView(tableView: UITableView, _ topColor:UIColor, _ bottomColor:UIColor) {

    let gradientBackgroundColors = [topColor.CGColor, bottomColor.CGColor]
    let gradientLocations = [0.0,1.0]

    let gradientLayer = CAGradientLayer()
    gradientLayer.colors = gradientBackgroundColors
    gradientLayer.locations = gradientLocations

    gradientLayer.frame = tableView.bounds
    let backgroundView = UIView(frame: tableView.bounds)
    backgroundView.layer.insertSublayer(gradientLayer, atIndex: 0)
    tableView.backgroundView = backgroundView
}

同时清除TableView单元格的颜色:

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
    cell.backgroundColor = UIColor.clearColor()
}

答案 1 :(得分:0)

@AGM Tazim

感谢您提供的那段代码。我对它进行了一些微调,以解决“ cGColor”升级后的快速语言的问题,并指定了渐变的起点和终点。

希望这对希望使其更具可定制性的人很有帮助

    func setGradientToTableView(tableView: UITableView, _ topColor:UIColor, _ bottomColor:UIColor) {

    let gradientBackgroundColors = [topColor.cgColor, bottomColor.cgColor]


    let gradientLayer = CAGradientLayer()
    gradientLayer.colors = gradientBackgroundColors
    gradientLayer.locations = [0.0,1.0]
    gradientLayer.startPoint = CGPoint(x: 0, y: 0)
    gradientLayer.endPoint = CGPoint(x: 0, y: 1)
    gradientLayer.frame = tableView.bounds
    let backgroundView = UIView(frame: tableView.bounds)
    backgroundView.layer.insertSublayer(gradientLayer, at: 0)
    tableView.backgroundView = backgroundView
}