将渐变层添加到表格视图

Posted

技术标签:

【中文标题】将渐变层添加到表格视图【英文标题】:Adding gradient layer to tableview 【发布时间】:2017-12-31 09:56:09 【问题描述】:

我一直在尝试弄清楚如何向 tableView 添加渐变层,并尝试了许多不同的方法,但是无论有多少bringSubviews,我都无法显示表格视图单元格或者我做的 sendSubviews。

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)

无论bring subviews和send subviews的组合做了多少次,我似乎总是得到这个并且单元格不会出现在最前面:

有谁知道如何解决这个问题,或者如何做我想做的另一种方式来使它工作?

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

【问题讨论】:

【参考方案1】:

创建背景视图并将其分配给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()

【讨论】:

我没有使用 Tableview 控制器。对于普通的视图控制器,我该怎么做。 只需将所有代码放在原来的位置,然后从 tableView 之前删除 sender. 在 Swift 4 中应该是 backgroundView.layer.insertSublayer(gradientLayer, at: 0)。也不要忘记如果 tableView 的布局发生变化(旋转等),那么渐变层将不会跟随它。您将需要覆盖viewDidLayoutSubviews 并在那里更新图层。否则,这是一个不错的解决方案,所以请投票。 渐变有效,但清除颜色位无效:imgur.com/a/wy7Kg 我修复了单元格的清晰颜色位,但我的物理 iPad Pro 似乎有问题。我该如何解决这个问题:imgur.com/a/1FRPn【参考方案2】:

@AGM 塔齐姆

感谢您提供的 sn-p 代码。我对其进行了一些调整,以说明“cGColor”的升级后的 swift 语言,并指定了渐变的起点和终点。

希望这对任何想要使其更可定制的人有所帮助

    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

【讨论】:

以上是关于将渐变层添加到表格视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的渐变子层显示奇怪?

在表格视图单元格背景上放置渐变

渐变层在视图中不可见

将渐变层添加到具有相同名称 Xcode/Swift 的所有按钮

表格视图单元格内的 UIImage

添加渐变作为视图顶层的最佳方法是啥?