我在这里发现了这个问题: Swift: gradient on a cell of a tableview
我正在使用Custom UITableViewCell,其中包含以下代码:
public class MyCustomUITableViewCell: UITableViewCell {
override public func layoutSubviews() {
super.layoutSubviews()
//setting backgroundColor works
//self.backgroundColor = UIColor.brownColor()
self.backgroundColor = UIColor.clearColor()
let colorTop = UIColor(red: 192.0/255.0, green: 38.0/255.0, blue: 42.0/255.0, alpha: 1.0).CGColor
let colorBottom = UIColor(red: 35.0/255.0, green: 2.0/255.0, blue: 2.0/255.0, alpha: 1.0).CGColor
let gradient = CAGradientLayer()
gradient.colors = [ colorTop, colorBottom]
gradient.locations = [ 0.0, 1.0]
self.backgroundView = UIView()
//setting view backgroundColor does not work
//self.backgroundView?.backgroundColor = UIColor.redColor()
self.backgroundView!.layer.insertSublayer(gradient, atIndex: 0)
}
}
显示的UITableViewCells清晰,因为我将self.backgroundColor
设置为UIColor.clearColor()
。
渐变没有显示,如果不是向UITableViewCell.backgroundView添加渐变,我只是将UITablveViewCell.backgroundView.backgroundColor
设置为UIColor.redColor(),这也不起作用。
当我在这行代码中创建UITableViewCell.backgroundView时:
self.backgroundView = UIView()
我假设backgroundView会自动填充UITableView中显示的UITableViewCells的边界,换句话说,backgroundView不是0x0宽度x高度正确吗?
答案 0 :(得分:10)
这可能对你和其他人有所帮助:它是我用来绘制渐变的(微小)UIView
子类,而不必陷入插入CALayers
的混乱中。这种方式UIView
使用自动布局等方式处理大小调整,这样更容易使用。
将此代码放入项目中的文件中,然后将其用作普通视图。如果需要,它可以直接进入单元格的背景视图。如果以这种方式使用,您应该能够自定义代码或IB中的颜色。
这是一个微不足道的代码,但请考虑CC-0 licensed - 即尽可能使用公共域名,“只要你想要”使用它“其他地方。
@IBDesignable class GradientView: UIView {
@IBInspectable var firstColor: UIColor = UIColor.whiteColor()
@IBInspectable var secondColor: UIColor = UIColor.blackColor()
override class func layerClass() -> AnyClass {
return CAGradientLayer.self
}
override func layoutSubviews() {
(layer as! CAGradientLayer).colors = [firstColor.CGColor, secondColor.CGColor]
}
}
如果您正在寻找更高级的功能,请尝试类似SwiftyGradient的内容 - 它可以做同样的事情(即将工作推送到UIView
以简化操作),但具有更多功能
答案 1 :(得分:3)
正如UITableViewCell的文档中所述:
如果要更改单元格的背景颜色,请执行此操作 tableView:willDisplayCell:forRowAtIndexPath:表视图的方法 委派。
我通常只是将另一个视图添加到我用作背景视图的单元格中,该视图适用于所有情况。