Iphone UITableViewCell中自定义UIView中的CAGradientLayer存在问题

Iphone UITableViewCell中自定义UIView中的CAGradientLayer存在问题,iphone,uitableview,gradient,Iphone,Uitableview,Gradient,我有一个有点特殊的情况需要帮助。我在UITableView中的每个UITableView单元格中都有一个自定义视图。没问题 在我的CustomView中有一个UILabel,它显示给定给它的一些文本。根据文本的长度,CustomView的宽度会增大/缩小。都很好 我遇到的问题是CustomView中的一个子层是渐变层(CAGradientLayer)。渐变大小不会在不可见单元格的屏幕外增长/收缩 让我给你看一些代码。。。我创建的CustomView如下所示: - (UITableViewCell

我有一个有点特殊的情况需要帮助。我在UITableView中的每个UITableView单元格中都有一个自定义视图。没问题

在我的CustomView中有一个UILabel,它显示给定给它的一些文本。根据文本的长度,CustomView的宽度会增大/缩小。都很好

我遇到的问题是CustomView中的一个子层是渐变层(CAGradientLayer)。渐变大小不会在不可见单元格的屏幕外增长/收缩

让我给你看一些代码。。。我创建的CustomView如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    CustomView *custom = [[CustomView alloc] init];
    custom.tag = 777;
    [cell.contentView addSubview:custom];
    [custom release];

}

}
在这个阶段我不使用框架,因为单元可以重复使用,并且宽度总是错误的。一旦单元格存在,我调用一个方法configureCell:在这里我执行以下操作:

CGSize teamMaxSize = CGSizeMake(300, 18);
CGSize teamNewSize = [[managedObject valueForKey:@"category"] 
    sizeWithFont:[UIFont systemFontOfSize:kFontSizeTeam]
    constrainedToSize:teamMaxSize
    lineBreakMode:UILineBreakModeWordWrap];

CustomView *lozenge = (CustomView *) [cell.contentView viewWithTag:777];
lozenge.frame = CGRectMake(10, 5, teamNewSize.width+12, 18);
[lozenge resetSize];
[lozenge setLabel:[managedObject valueForKey:@"category"]];
这很好,我的CustomView的宽度是根据“category”键的长度设置的。大小;上面的方法只是将我前面提到的UILabel调整为CustomView的新框架,然后再填充值

无论如何,回到我的问题上来。我正在CustomView的drawRect:方法中创建背景渐变。它工作得很好,但是在初始化时CustomView的大小是一样的。调整大小后,我需要调整gradient.frame的大小。因此,我尝试添加

gradient.frame = self.bounds

当我在前面提到的代码中调用resetSize时。然而,当在UITableView中滚动时,我可以看到渐变在加载到视图中时从左向右填充。我是否可以在“屏幕外”实现这一点,以便在自定义视图出现时立即填充渐变?

您是否考虑过使用
cagradentlayer
作为自定义视图的图层类,而不是在
drawRect:
中创建渐变,例如:

+ (Class)layerClass
{
    return [CAGradientLayer class];
}

然后,您可以通过
self.layer

在初始值设定项中执行渐变的任何设置,但在初始化CustomView时无法设置渐变的宽度。。。我必须等待…我不确定我是否完全理解您想要做什么,但是如果您试图为您的单元格创建渐变背景,我建议创建一个简单的
CustomBackgroundView
类,如前所述(带有
CAGradientLayer
背景),并将其附加到单元格的
backgroundView
属性。它应该根据您的单元格自动调整大小,您可以在
CustomView
中绘制其余的自定义图形。我正在CustomView的背景中创建渐变。将自定义视图想象为一个菱形按钮,其中包含一行文本。它与其他对象在我的单元格中…进一步考虑,
gradient.frame=self.bounds
是否发生在
UIView
动画上下文中?不,它只是在自定义方法中调整UILabel的大小。