将渐变层添加到表格视图
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
【讨论】:
以上是关于将渐变层添加到表格视图的主要内容,如果未能解决你的问题,请参考以下文章