在 UITableviewcell swift 中设置水平渐变

Posted

技术标签:

【中文标题】在 UITableviewcell swift 中设置水平渐变【英文标题】:set horizontal gradient in UITableviewcell swift 【发布时间】:2016-01-04 14:53:53 【问题描述】:

我想在每个单元格上创建一个从左到右的水平渐变 我使用 CAGradientLayey 创建一个自定义层并将该层添加到 tableview 单元格

这是我的 swift 代码

  func gradient(frame:CGRect) -> CAGradientLayer 
    let layer = CAGradientLayer()
    layer.frame = frame
    print(frame)
    layer.startPoint = CGPointMake(0,0.5)
    layer.endPoint = CGPointMake(1,0.5)
    layer.colors = [ UIColor.redColor().CGColor,UIColor.blueColor().CGColor]
    return layer


override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
        cell.layer.addSublayer(gradient(cell.frame))
           cell.textLabel?.textColor = UIColor(red:0, green:0.102, blue: 0.2, alpha: 1)


但是渐变并没有覆盖所有的tableview单元格,它在渐变单元格和普通单元格背景颜色之间切换,看起来渐变完全覆盖了单元格文本。我不知道我做错了什么

有什么建议吗?谢谢

【问题讨论】:

【参考方案1】:

不要使用frame,而是使用单元格的bounds,以及索引0处的insertSublayer,因此它将位于包括您的标签在内的所有其他层之后

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,
    forRowAtIndexPath indexPath: NSIndexPath) 
        cell.layer.insertSublayer(gradient(cell.bounds), atIndex:0)
        cell.backgroundColor = UIColor.clearColor()
        cell.textLabel?.textColor = UIColor(red:0, green:0.102, blue: 0.2, alpha: 1)            

【讨论】:

做到了,但单元格文本仍然丢失。有什么建议吗?谢谢 完成了工作,谢谢!

以上是关于在 UITableviewcell swift 中设置水平渐变的主要内容,如果未能解决你的问题,请参考以下文章

在嵌入在 UITableviewCell 中的 UICollectionView 中进行 Segue,Swift

Swift交替UITableViewCell渐变颜色

如何在 Swift 中检测对 UITableViewCell 的 UIImageView 的触摸?

UITableViewCell 中的 UICollectionView 在 swift 3 中滚动不流畅

如何在 Swift 3 中将 UIButton 添加到我的 UITableViewCell 中?

UITableViewCell 不会在 swift 中保持突出显示