自定义UITableViewCell不占用单元格的完整边界?

时间:2012-12-11 20:51:52

标签: objective-c ios cocoa-touch uitableview

我正在做this tutorial而我无法得到我想要的结果。

我将UITableViewCell子类化并直接定制了单元格,因为我想为每个单元格添加渐变效果。基本上,我在每个单元格的顶部和底部添加了渐变效果。

以下是我用过的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // add a layer that overlays the cell adding a subtle gradient effect
        gradientLayer = [CAGradientLayer layer];
        gradientLayer.frame = self.bounds;
        gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor],
        (id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor],
        (id)[[UIColor clearColor] CGColor],
        (id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]];
        gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f];
        [self.layer insertSublayer:gradientLayer atIndex:0];
    }
    return self;
}
-(void) layoutSubviews{
   [super layoutSubviews];

   //ensure that gradient layers occupy the full bounds
   gradientLayer.frame = self.bounds;
}

作为一个理想的结果,我想看到gradientLayer占据了单元格的完整边界。但是,它只占用距离电池起点和终点1mm。所以,它没有占据全部界限。

如果我注释掉[super layoutSubviews],它会显示完整的渐变,它占据了细胞的完整边界。但这一次,它没有显示细胞内的文本。

我无法解决它。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

以下评论显示问题看起来像这样

this

解决方案是将细胞的背景设置为清晰的颜色。

答案 1 :(得分:0)

执行此操作的正确方法是使用self.contentView.frame,如下所示:

gradientLayer.frame = self.contentView.frame;