Swift UITableView

时间:2018-01-17 19:46:31

标签: swift uitableview gradient

我想在Swift中的UITableView的每一行中创建一个渐变背景图层。在cellForRowAt函数中,我有这段代码来绘制渐变图层。

guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PlayerTableViewCell else { fatalError("The dequeued cell is not an instance of PlayerTableViewCell") }

// set background color for the cell
let newLayer = CAGradientLayer()
newLayer.colors = [UIColor.black.cgColor, UIColor.darkGray.cgColor ]
newLayer.frame = cell.frame
cell.layer.addSublayer(newLayer)
cell.layer.insertSublayer(newLayer, at: 0)

当我运行此代码时,只有表中的第一个条目具有渐变图层,其他单元格具有默认背景。 我需要添加一些东西吗?

Missing background gradient color in table cells

2 个答案:

答案 0 :(得分:2)

问题是当超视图的帧发生变化时,release {....不会更新其边界 - 因此当超视图更改其帧时,gradientLayer仍将保持相同的边界。您需要在gradientLayer

中更新其边界

我会选择@ Jay的回答,但那里有一些问题:

layoutSubviews

我已经对它进行了测试,它运行得很好(好吧,@ Jay的回答似乎也适用于此事。)

答案 1 :(得分:1)

为什么不将它添加到单元格的子类中?这样你也可以在prepareForReuse中删除它,所以你不能在单元格中添加多个?

var newLayer:CAGradientLayer!

override func layoutSubviews() {
    super.layoutSubviews()
    //Code to insert the gradient here.
    newLayer = CAGradientLayer()
    newLayer.frame = contentView.frame
    newLayer.colors = [UIColor.black.cgColor, UIColor.darkGray.cgColor ]
    contentView.layer.insertSublayer(newLayer, at: 0)
}