Прозрачный фон UITableViewCell (включая imageView/accessoriesView)

Когда я устанавливаю UITableViewCells backgroundColor в полупрозрачный цвет, он выглядит хорошо, но цвет не распространяется на всю ячейку.

Площадь вокруг imageView и accessoryView приближается к [UIColor clearColor]...

alt text

Я пробовал явно устанавливать теги cell.accessoryView.backgroundColor и cell.imageView.backgroundColor на тот же цвет, что и ячейка backgroundColor, но она не работает. Он помещает крошечную коробку вокруг значка, но не расширяется, чтобы заполнить левый край. Правый край кажется не затронутым этим.

Как я могу это исправить?

EDIT. Вот код ячейки исходной таблицы:

- (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;
}

Ответ 1

Сегодня мы с Беном поняли это, вот резюме для группы, если это поймает кого-нибудь еще.

Вы должны установить фон ячейки и 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;
}

Ответ 2

Вы изучили настройку цвета фона ячейки contentView и прозрачность прозрачности ячеек, аксессуаров и изображений?

Кроме того, эта статья может помочь вам показать некоторые альтернативы.