Objective c 自定义UITableViewCell未占用单元格的完整边界?

Objective c 自定义UITableViewCell未占用单元格的完整边界?,objective-c,ios,cocoa-touch,uitableview,Objective C,Ios,Cocoa Touch,Uitableview,我正在做,但在某种程度上,我无法得到我想要的结果 我对UITableViewCell进行了子类化,并直接定制了该单元格,因为我想为每个单元格添加渐变效果。基本上,我在每个单元格的顶部和底部添加了渐变效果 以下是我使用的代码: - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithStyle:style reuse

我正在做,但在某种程度上,我无法得到我想要的结果

我对
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占据单元格的全部边界。但是,它仅占据距离单元起点和终点约1毫米的位置。因此,它没有占据全部边界

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


我无法解决它。感谢您的帮助。

下面的评论显示问题是这样的


解决方案是将单元格的背景设置为清晰的颜色。

正确的方法是使用self.contentView.frame,如下所示:

gradientLayer.frame = self.contentView.frame;

如果在设置gradientLayer.frame后调用超级布局子视图会怎么样?是否尝试删除layoutSubviews方法?在我的自定义单元格中,我没有实现该方法,并且渐变看起来很好。我们可以看到整个类吗?我已经尝试了你建议的方法。但它不起作用,整个班级都是这样。除import语句外,没有其他内容。也许问题出在代码的其他地方。然而奇怪的是,当我删除超级布局子视图时,我应该如何实现这段代码?我是否应该删除initWithStyle和layoutSubviews函数?我是iOS的新手,很抱歉这个简单的问题。(尝试删除它们并使用此代码放置。结果仍然相同)这就是想法。我测试了这个,它成功了。再一次,我也测试了你最初的想法,这也奏效了。所以我不确定是什么导致了这种差距。它甚至可能不是细胞。你能把背景设置成红色,去掉渐变,看看整个桌子是否是红色的吗?我在另一页找到了解决办法。“在Interface Builder中打开文件TableViewTricksViewController.xib。选择表格视图,然后打开属性检查器,将分隔符更改为无,背景色不透明度更改为零。这两个设置显示在右侧的图像中。”它在本页中显示。做了这些,现在它完全工作了。但仍然有人能解释为什么在我改变这些之前它不起作用。我在代码中手动删除了分隔符行。您可能将类型设置为“普通”。我认为这种类型的单元格为包含图像和文本的单元格添加了一个视图。该视图还使用单元格的背景色。通过将该颜色设置为“清除”,渐变变得可见。