我正在使用此answer中的CAGradientLayer方法在我的UITableViewCells上设置渐变。
然而,对于这个表,我通过tableView:heightForRowAtIndexPath:增加了单元格的高度。我的渐变图层现在不覆盖单元格的整个高度,而是停留在原始高度(请参阅pic)。
我尝试将图层的框架设置为tableView:cellForRowAtIndexPath中的单元格边界:但这也不起作用。有没有办法指定图层应该自动调整?
谢谢!
代码:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 55;
}
- (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];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.colors = [NSArray arrayWithObjects:
(id)[[UIColor purpleColor] CGColor],
(id)[[UIColor redColor] CGColor],
nil];
[cell.layer insertSublayer:gradient atIndex:0];
}
cell.layer.borderWidth = 1.0;
CALayer* gradientLayer = [cell.layer.sublayers objectAtIndex:0];
DebugLog(@"cell bounds: %@", NSStringFromCGRect(cell.bounds));
gradientLayer.frame = cell.bounds;
// Configure the cell...
return cell;
}
答案 0 :(得分:2)
如果您的单元格高度编码为55,则会出现此问题,那么您应该执行以下操作,然后填充此表格的单元格。
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = CGRectMake(0, 0, 320, 55);
不要做
gradientLayer.frame = cell.bounds;
答案 1 :(得分:0)
我认为你是以错误的方式自定义表格单元格。请参阅http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html。
答案 2 :(得分:0)
我最终使用了UITableViewDelegate的方法:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath;
在其中,我检查是否已经添加了渐变图层,如果没有,我会添加它 对此并不完全满意,但它让我继续前进。