【问题标题】:Cannot apply CAGradientLayer as UITableView background view无法将 CAGradientLayer 应用为 UITableView 背景视图
【发布时间】:2018-12-06 14:54:50
【问题描述】:

我有一个 UITableViewController 我正在尝试在其上应用渐变背景。

我希望渐变出现在整个视图上,而不仅仅是一个单元格。

我有一个带有我在viewDidLoad 中调用的函数的扩展。我希望这将在我的UITableView 后面应用并可见

但是背景总是白色的。我设置了view.backgroundColor = UIColor.clear,因为这只是我的渐变上的一个白色层,但是它没有出现,因为背景现在只是黑色。

HomeController.swift

   extension HomeController {
        fileprivate func applyBackgroundGradientView() -> Void {
            let frame = CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height)
            let bgView = UIView(frame: frame)
            bgView.layer.insertSublayer(gradientBackgroundView, at: 0)

            tableView.backgroundView = bgView
        }
    }

GradientBackgroundView.swift

class GradientBackgroundView: CAGradientLayer {

    override init() {
        super.init()
        setupGradientLayer()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    fileprivate func setupGradientLayer() -> Void {

        self.colors = ["226320","256c23","39a636","267024"].map({ hex -> CGColor in
            return UIColor.hexStringToUIColor(hex: hex).cgColor
        })

        self.calculatePoints(for: 45)
    }
}

【问题讨论】:

  • 您可以在视图控制器上设置渐变并使tableview清晰
  • hmmm,所以我尝试了view.layer.insertSublayer(gradientBackgroundView, at: 0),我得到了同样的结果,没有设置任何内容。
  • 您是否将单元格的背景颜色设置为.clear?您应该使用视图层次结构检查来查看背景视图前面的视图是否遮挡了它。

标签: ios swift uitableview cagradientlayer


【解决方案1】:

我在您的CAGradientLayer 上没有看到框架。

如果您不设置frame,您的视图将不会显示。

let gradientBackgroundView = GradientBackgroundView()
gradientBackgroundView.frame = CGRect(x: 0.0, y: 0.0, width: view.frame.size.width, height: view.frame.size.height)
view.layer.insertSublayer(gradientBackgroundView, at: 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多