【发布时间】:2010-09-17 20:25:47
【问题描述】:
我有一些特殊情况需要帮助。我有一个 CustomView,我将它放在 UITableView 中的每个 UITableViewCell 中。没有问题。
在我的 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];
}
}
我在这个阶段不使用 initWithFrame,因为单元格可能会被重复使用并且宽度总是错误的。一旦单元格在那里,我调用一个方法 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 的宽度是根据“类别”键的长度设置的。重置大小;上面的方法只是简单地将我之前提到的 UILabel 调整为 CustomView 的新框架,然后再用值填充它。
无论如何,回到我的问题。我在我的 CustomView 的 drawRect: 方法中创建背景渐变。它工作正常,但是在初始化时 CustomView 的大小。调整大小后,我需要调整 gradient.frame 的大小。所以,我尝试添加
gradient.frame = self.bounds
当我在上述代码中调用 resetSize 时。但是,当滚动 UITableView 时,我可以看到渐变从左到右填充,因为它加载到视图中。无论如何我可以让这种情况发生在“屏幕外”,以便 CustomView 一出现就被渐变填充?
【问题讨论】:
标签: iphone uitableview gradient