Ios 如何从单元格内向tableview中的单元格添加CAGradientLayer';awakeFromNib()方法?

Ios 如何从单元格内向tableview中的单元格添加CAGradientLayer';awakeFromNib()方法?,ios,uitableview,swift,Ios,Uitableview,Swift,我一直在使用以下代码向单元格添加CaGradent层: let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as myCell cell.mImageView.image = UIImage(named: scripts[indexPath.row].thumbnailImage) let gradientLayer = CAGradientLayer() if(ce

我一直在使用以下代码向单元格添加CaGradent层:

let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as myCell

cell.mImageView.image = UIImage(named: scripts[indexPath.row].thumbnailImage)

let gradientLayer = CAGradientLayer()

if(cell.layer.sublayers.count == 2){ //This is to stop stacking gradient layers
  gradientLayer.colors = [UIColor.clearColor().CGColor, UIColor.blackColor().CGColor]
  gradientLayer.locations = [0.6, 1.0]
  gradientLayer.frame = cell.bounds
  cell.layer.insertSublayer(gradientLayer, below: cell.mImageView.layer)
}
这是来自我的CustomTableViewController类的tableView(uxCellForRowAtIndexPath)方法

我有一个
myCell
类,我更愿意用它来执行渐变布局,但是我不能在
awakeFromNib()
方法中使用此代码或
cell
对象


如何从myCell类的
awakeFromNib
(或
init()
)方法中插入此CAGradientLayer?单元格还包含一个标签,我想将其插入标签下方。

我不知道为什么会出现此错误。我试着对你的代码(在cell类中)稍作修改,结果一切正常。在这里

class RDTableViewCell: UITableViewCell {

    @IBOutlet var mImageView: UIImageView!

    override func didMoveToSuperview() {

        let gradientLayer = CAGradientLayer()

        gradientLayer.colors = [UIColor.clearColor().CGColor, UIColor.blackColor().CGColor]
        gradientLayer.locations = [0.6, 1.0]
        gradientLayer.frame = self.bounds
        self.layer.insertSublayer(gradientLayer, below: self.mImageView.layer)
    }
}

我假设你想要单元格底部的梯度,如果我把代码放在awakeFromNib中,我的单元格(高度为70)就不会出现这种情况

我不知道你为什么会犯这样的错误。我试着对你的代码(在cell类中)稍作修改,结果一切正常。在这里

class RDTableViewCell: UITableViewCell {

    @IBOutlet var mImageView: UIImageView!

    override func didMoveToSuperview() {

        let gradientLayer = CAGradientLayer()

        gradientLayer.colors = [UIColor.clearColor().CGColor, UIColor.blackColor().CGColor]
        gradientLayer.locations = [0.6, 1.0]
        gradientLayer.frame = self.bounds
        self.layer.insertSublayer(gradientLayer, below: self.mImageView.layer)
    }
}


我假设你想要单元格底部的梯度,如果我把代码放在awakeFromNib中,我的单元格(高度为70)就不会出现这种情况

为什么不能在awakeFromNib或init方法中使用此代码?当我使用
self.layer.insertSublayer
self.layer.addSublayer
时,你会得到什么结果?我会得到一个运行时错误。你会得到什么错误?@rdelmar线程1:EXC_BAD_访问(code=2,地址=0x7ff2038e31ff8)为什么不能在awakeFromNib或init方法中使用此代码?如果您尝试这两种方法中的任何一种,会得到什么结果?@rdelmar当我使用
self.layer.insertSublayer
self.layer.addSublayer
时,我得到一个运行时错误。您得到了什么错误?@rdelmar线程1:EXC_BAD_访问(code=2,地址=0x7ff2038e31f8)好,所以我复制了你的方法,但由于某种原因梯度实际上没有应用到单元格中。@A_toaster我稍微修改了它,将代码放入didMoveToSuperview,但我不知道这是否能解决你的问题。谢谢你,你的代码在
didMoveToSuperview
中时工作正常!你知道为什么它不能与
awakeFromNib
一起工作吗?奇怪的是,当我使用
self.layer.insertSublayer(gradientLayer,在下面:self.namelab.layer)
时,namelab仍然显示在渐变下面。很奇怪indeed@A_toaster,您是否确认呼叫了awakeFromNib?即使是这样,我注意到在调用awakeFromNib时,单元格的大小也不一定正确(无论我使用什么模拟器,也不管我在table view控制器中设置了什么单元格高度,它都显示为320 x 44)。是的,它确实运行了,但我猜直到稍晚之后才执行大小调整。再次感谢!好的,所以我复制了你的方法,但由于某种原因梯度实际上没有应用到单元格中。@A_toaster我稍微修改了它,将代码放在didMoveToSuperview中,但我不知道这是否能解决你的问题。谢谢你,你的代码在
didMoveToSuperview
中时工作正常!你知道为什么它不能与
awakeFromNib
一起工作吗?奇怪的是,当我使用
self.layer.insertSublayer(gradientLayer,在下面:self.namelab.layer)
时,namelab仍然显示在渐变下面。很奇怪indeed@A_toaster,您是否确认呼叫了awakeFromNib?即使是这样,我注意到在调用awakeFromNib时,单元格的大小也不一定正确(无论我使用什么模拟器,也不管我在table view控制器中设置了什么单元格高度,它都显示为320 x 44)。是的,它确实运行了,但我猜直到稍晚之后才执行大小调整。再次感谢!