UITableViewCell透明背景(包括imageView / accessoryView)

时间:2009-10-01 04:55:55

标签: iphone iphone-sdk-3.0 uitableview

当我将UITableViewCells backgroundColor设置为半透明颜色时,它看起来不错,但颜色并不覆盖整个单元格。

imageViewaccessoryView周围的区域将显示为[UIColor clearColor] ...

alt text

我已尝试明确将cell.accessoryView.backgroundColorcell.imageView.backgroundColor设置为与单元格backgroundColor相同的颜色,但它不起作用。它在图标周围放置一个小盒子,但不会扩展以填充左边缘。右边缘似乎不受此影响。

我该如何解决这个问题?

编辑:这是原始表格单元格代码:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.opaque = NO;
        cell.textLabel.backgroundColor = [UIColor clearColor];
        cell.backgroundColor = [UIColor colorWithRed:.1 green:.1 blue:.1 alpha:.4];
        cell.textColor = [UIColor whiteColor];
    }

    cell.imageView.image = [icons objectAtIndex:indexPath.row];
    cell.textLabel.text = [items objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

2 个答案:

答案 0 :(得分:16)

Ben和我今天想出了这个,这是该小组的总结,以防其他人抓到。

每次调用cell.textLabel.backgroundColor时都必须设置单元格背景和cellForRowAtIndexPath,而不仅仅是alloc/init阶段(即如果tableView有一个出列缓存未命中)。

所以,代码变成了这个:

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
        cell.opaque = NO;        
    }

    // All bgColor configuration moves here
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.backgroundColor = [UIColor colorWithRed:.1 green:.1 blue:.1 alpha:.4];
    cell.textColor = [UIColor whiteColor];
    cell.imageView.image = [icons objectAtIndex:indexPath.row];
    cell.textLabel.text = [items objectAtIndex:indexPath.row];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

答案 1 :(得分:2)

您是否考虑过设置单元格contentView的背景颜色并保持单元格,附件和图像视图透明?

此外,this article可能会为您提供一些替代方案。