2009-10-01 9 views
10

Quando si imposta UITableViewCells backgroundColor in un colore semitrasparente, sembra buono, ma il colore non copre l'intera cella.UITableViewCell sfondo trasparente (incluso imageView/accessoryView)

La zona intorno al imageView e accessoryView stanno arrivando come [UIColor clearColor] ...

alt text

Ho provato a fissare in modo esplicito il cell.accessoryView.backgroundColor e cell.imageView.backgroundColor essere dello stesso colore della cella di backgroundColor, ma non funziona Mette una piccola scatola attorno all'icona, ma non si espande per riempire il bordo sinistro. Il lato destro non sembra essere influenzato da questo.

Come posso risolvere questo?

EDIT: Ecco il codice cella cruda:

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

risposta

16

Ben e ho capito questo oggi, ecco il sommario per il gruppo nel caso in cui questo cattura qualcun altro.

è necessario impostare lo sfondo della cella e cell.textLabel.backgroundColor ogni volta cellForRowAtIndexPath si chiama, non solo durante la fase di alloc/init (vale a dire se il tableView ha una cache di perdere dequeue).

Quindi, il codice diventa questo:

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

in realtà dovevo fare ancora una cosa. È necessario impostare cell.textLabel.backgroundColor * AFTER * sul colore di sfondo della cella. Non ho idea del motivo per cui ho bisogno di farlo, ma ora funziona. Grazie Mike! –

2

Hai guardato nella impostazione del colore della cella del contentView sfondo e mantenendo il cellulare, accessorio, e la vista di immagini trasparenti?

Inoltre, this article potrebbe aiutarti a mostrarti alcune alternative.

+0

stavo usando questo articolo per l'ispirazione, ma purtroppo non usa celle trasparenti. L'impostazione del colore di sfondo contentView ha avuto effetti molto strani. Ho anche provato a impostare contentView.opaque = NO, ma sembrava ancora terribile. –