向 tableview 添加渐变会隐藏内容
Posted
技术标签:
【中文标题】向 tableview 添加渐变会隐藏内容【英文标题】:Adding a gradient to a tableview hides content 【发布时间】:2016-01-29 20:26:49 【问题描述】:我有一个表格视图,它运行良好。但我必须在背景上添加渐变。我在 viewDidLoad 中用这段代码做到了:
gradientLayer.frame = self.view.bounds
let color1 = UIColor.blueColor().CGColor as CGColorRef
let color2 = UIColor.redColor().CGColor as CGColorRef
gradientLayer.colors = [color1, color2]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x: 1, y: 0)
gradientLayer.endPoint = CGPoint(x: 0, y: 0)
self.view.layer.addSublayer(gradientLayer)
self.view.backgroundColor = UIColor.greenColor()
但现在我没有看到我的 tableview 的任何内容。
【问题讨论】:
不要使用self.view.layer.addSublayer(gradientLayer)
,试试self.layer.insertSublayer(gradientLayer, atIndex:0)
。
@SauvikDolui 是的,它可以工作,但需要进行简单的更正。 self.view.layer.insertSublayer(gradientLayer, atIndex:0)
而不是 `self.layer.insertSublayer(gradientLayer, atIndex:0)。对于 Swift 3,atIndex 也刚刚变为 at。
【参考方案1】:
要适当配置背景渐变,您可以使用UITableView
的backgroundView
属性和带有CAGradientLayer
的视图。生成的代码(在 Swift 3 中)将是:
/* A small UIView subclass displaying gradient */
class GradientView: UIView
/* Overriding default layer class to use CAGradientLayer */
override class var layerClass: AnyClass
return CAGradientLayer.self
/* Handy accessor to avoid unnecessary casting */
private var gradientLayer: CAGradientLayer
return layer as! CAGradientLayer
/* Public properties to manipulate colors */
public var fromColor: UIColor = UIColor.red
didSet
var currentColors = gradientLayer.colors
currentColors![0] = fromColor.cgColor
gradientLayer.colors = currentColors
public var toColor: UIColor = UIColor.blue
didSet
var currentColors = gradientLayer.colors
currentColors![1] = toColor.cgColor
gradientLayer.colors = currentColors
/* Initializers overriding to have appropriately configured layer after creation */
override init(frame: CGRect)
super.init(frame: frame)
gradientLayer.colors = [fromColor.cgColor, toColor.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
gradientLayer.colors = [fromColor.cgColor, toColor.cgColor]
gradientLayer.startPoint = CGPoint(x: 0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.5)
/* Code that should be called in viewDidLoad method */
class MyViewController: UITableViewController
/* ... */
override func viewDidLoad()
super.viewDidLoad()
tableView.backgroundView = GradientView()
/* ... */
【讨论】:
非常感谢!它确实有效。只有一件事,对不起,如何让它水平? 不客气!为每个配置水平渐变方向的初始化程序添加了 2 行。 它会给我错误???在下面的功能......?对于 swift 3: private var gradientLayer: CAGradientLayer return layer as! CAGradientLayer -> 无法将“CALayer”(0x10ac29de8)类型的值转换为“CAGradientLayer”(0x10ac2a838)。以上是关于向 tableview 添加渐变会隐藏内容的主要内容,如果未能解决你的问题,请参考以下文章
如何在情节提要中向原型 UITableViewCell 添加渐变背景颜色?