在 UITableViewCell 子类中添加 CAGradientLayer 需要帮助

Posted

技术标签:

【中文标题】在 UITableViewCell 子类中添加 CAGradientLayer 需要帮助【英文标题】:Need assistance adding CAGradientLayer in UITableViewCell subclass 【发布时间】:2014-12-06 11:22:47 【问题描述】:

在 UITableViewCell 子类中,我尝试添加渐变层但它不起作用,我在互联网上搜索但确实找到了对我有用的解决方案,代码如下:

-(id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if(self)
        _gradientLayer = [CAGradientLayer layer];
        _gradientLayer.frame = self.bounds;
        _gradientLayer.colors = @[[UIColor whiteColor], [UIColor greenColor], [UIColor blueColor], [UIColor orangeColor]];
        _gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
         [[[[self layer] sublayers] objectAtIndex:0] removeFromSuperlayer];
        self.backgroundColor = [UIColor clearColor];
        [self.layer insertSublayer:_gradientLayer above:[self.layer.sublayers firstObject]];
    
    return self;


-(void)layoutSubviews 
    [super layoutSubviews];
    _gradientLayer.frame = self.bounds;

谁能告诉我为什么它不起作用,这段代码有什么问题?

【问题讨论】:

您的代码没有问题,它将图层添加到单元格本身。尝试将其添加到 contentView 或使 contentView 透明。 【参考方案1】:

您的问题是您使用 UIColor 对象作为渐变层颜色,但您需要使用 CGColor 对象:

_gradientLayer.colors = @[(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor greenColor].CGColor, (__bridge id)[UIColor blueColor].CGColor, (__bridge id)[UIColor orangeColor].CGColor];

【讨论】:

正如我在问题中提到的,我正在使用 UITableViewCell 子类和 initWithStyle 触发,但仍然没有渐变:(。

以上是关于在 UITableViewCell 子类中添加 CAGradientLayer 需要帮助的主要内容,如果未能解决你的问题,请参考以下文章

为子类 UITableViewCell 上的披露按钮设置目标

UITableViewCell 子类中的 UIButton 未注册点击

麻烦将 UITextField 链接到 UITableViewCell 子类

UITableViewCell 子类,错误的高度直到滚动

UITableViewCell 子类布局在禁用自动布局的故事板中搞砸了

如何以编程方式在 UITableViewCell 中添加自定义视图?