无法在索引0处插入CAGradientLayer(在tableView后面)

时间:2017-11-09 07:11:42

标签: ios swift xcode uitableview cagradientlayer

尝试插入一个自定义渐变的图层作为tableView的背景。但是,它会显示在表格前面。

之前有用,但是当我更新XCode时它现在不起作用。

    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    let gradient = self.getMenuGradientLayer()

    gradient.frame = CGRect(x: 0, y: -statusBarHeight, width: self.view.frame.width, height: statusBarHeight + self.view.bounds.height)

    // Tried multiple options. Not at the same time, of course.
    self.view.layer.insertSublayer(gradient, at: 0) // Worked previously
    self.tableView.layer.insertSublayer(gradient, at: 0)
    self.tableView.backgroundView?.layer.insertSublayer(gradient, at: 0)

其中一些选项根本不显示渐变,有些显示在桌面前面。

该类本身是 UITableViewController

我尝试在 viewDidLoad,viewWillAppear,viewWillLayoutSubviews 中实现此代码。

同样的事情......

1 个答案:

答案 0 :(得分:0)

找到另一种使用tableView的backgroundView属性执行任务的方法。

    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    let frame = CGRect(x: 0, y: -statusBarHeight, width: self.view.frame.width, height: statusBarHeight + self.view.bounds.height)

    let gradient = self.getMenuGradientLayer()

    gradient.frame = frame

    let backgroundView = UIView(frame: frame)

    backgroundView.layer.insertSublayer(gradient, at: 0)

    self.tableView.backgroundView = backgroundView

然而,仍然不明白为什么以前的解决方案停止工作......