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

Posted

技术标签:

【中文标题】无法在索引 0 处插入 CAGradientLayer(在 tableView 后面)【英文标题】:Cannot insert CAGradientLayer at index 0 (behind tableView) 【发布时间】:2017-11-09 07:11:41 【问题描述】:

尝试插入具有自定义渐变的图层作为 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】:

找到了另一种使用 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

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

【讨论】:

以上是关于无法在索引 0 处插入 CAGradientLayer(在 tableView 后面)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive DB 框中的位置 0 处插入项目?

迭代数组并在索引处插入元素

为啥 Swift 数组插入和 removeAtIndex 操作行为不一致?

Jquery在某个索引处将新行插入表中

iOS NSArray 在索引处插入对象

如何在张量流中张量的某些索引处插入某些值?