UITableView sfondo chiaro


90

Mi rendo conto che iOS 7 non è stato ufficialmente rilasciato e non dovremmo discuterne MA sto impazzendo cercando di capire questo problema. Su iOS 6, la visualizzazione della tabella era trasparente e aveva un bell'aspetto. È la prima volta che esegui iOS 7 e lo sfondo è bianco.

Ho provato a rendere il backgroundColor della tabella, il colore della cella ecc. Ecc. In UIColor clearColor ma non ho modificato.

Come risolvere questo problema?

la tavola


1
Hai provato ad apparecchiare la tavola backgroundViewin modo chiaro?
Annulla

Potresti mostrare il codice in cui stai impostando il colore di sfondo? E la vista genitore? Forse lo sfondo della vista tabella è chiaro ma il genitore no?
sooper

Ho notato la stessa cosa ma quando ho installato la stessa app che precedeva la mia versione corrente su iOS 7.0, non stava succedendo. Allora questo problema risiede in xCode5.0?
Totumus Maximus,

Risposte:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

in cellForRowAtIndexPath

Inoltre, assicurati che la tua vista tabella abbia effettivamente uno sfondo trasparente (nello storyboard): inserisci qui la descrizione dell'immagine


George, aggiungi quel codice all'interno del metodo - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
Per i casi, se hai davvero bisogno di selectedBackgroundView, puoi inserire quanto segue in cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; o anche in awakeFromNib: self.selectedBackgroundView = ... Notare che: self.backgroundColor = [UIColor clearColor]; non funziona in awakeFromNib sotto iOS7. Ma: cell.backgroundColor = [UIColor clearColor]; funziona correttamente solo in cellForRowAtIndexPath per iOS 7.0
slamor

11
Basta aggiungere la riga: cell.backgroundColor = [UIColor clearColor];
evya

Funziona come charm cell.backgroundColor = [UIColor clearColor];
bpolat

Come farlo in Swift?
Qadir Hussain

58

Metti questo:

cell.backgroundColor = [UIColor clearColor];

In questa sezione:

cellForRowAtIndexPath

1
In iOS 6, è sufficiente impostare backgroundViewuna visualizzazione vuota, ma questo codice aggiuntivo è necessario per iOS 7.
Kevin Borders

25

Prova prima a impostare backgroundView su zero.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Non sono sicuro se si tratta di un cambiamento nella documentazione con iOS7 o è sempre stato lì e semplicemente non ha influenzato il colore di sfondo, ma per UITableView Class Reference @property backgroundView

"È necessario impostare questa proprietà su zero per impostare il colore di sfondo della vista tabella."

modifica: corretta sintassi del codice


25

Questo ha avuto una risposta, ma in modo errato in molti modi.

È necessario implementare il seguente metodo delegato:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Non è possibile inserire la correzione in cellForRowAtIndexPath perché è dopo il rendering della cella e lampeggerà uno sfondo bianco prima che lo sfondo venga impostato per essere cancellato (su dispositivi più lenti).

Usa questo metodo delegato e i tuoi problemi saranno risolti!


1
Sì. Per iOS 7 questo è il modo per cancellare lo sfondo. Tutti gli altri suggerimenti sopra potrebbero non funzionare.
girish_vr

15

In realtà il posto ufficialmente corretto per cambiare il colore di sfondo della cella è diverso in base alla documentazione ( Riferimento alla classe UITableViewCell ):

Indipendentemente dal fatto che utilizzi una cella predefinita o personalizzata, puoi modificare lo sfondo della cella utilizzando la proprietà backgroundView o modificando la proprietà backgroundColor ereditata. In iOS 7, le celle hanno uno sfondo bianco per impostazione predefinita; nelle versioni precedenti di iOS, le celle ereditano il colore di sfondo della vista tabella che lo racchiude. Se si desidera modificare il colore di sfondo di una cella, farlo nel tableView: willDisplayCell: forRowAtIndexPath: metodo del delegato della visualizzazione tabella.


Lo sto provando, ma le primissime celle mostrate hanno tutte uno sfondo bianco. Se creo nuove celle scorrendo, avranno lo sfondo trasparente che desidero. Non so cos'altro provare ...
David Dunham

Non importa, sembra essere un problema di tempismo. Stavo facendo cose in awakeFromNib, che era troppo presto.
David Dunham


6

Questo è un problema piuttosto frustrante. Ecco la mia soluzione attuale:

Aggiungilo alla tua UITableViewCellsottoclasse.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

Oh Dio. Grazie. Mi ha salvato la notte. La tua risposta avrebbe dovuto essere quella accettata.
Michal Shatz

5

Questo ha funzionato per me in iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

e poi in cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];

4

prova questo snippet di codice

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

4

Questo ha funzionato solo per me quando ho modificato un colore di sfondo chiaro per ogni cella e un colore chiaro per la tabella stessa. ENTRAMBI PROGRAMMATICAMENTE

per impostare il colore chiaro per il tavolo:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

per impostare il colore delle celle:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

Una cosa bella. Il colore predefinito di UITable sembra essere il bianco (non so perché)

Sfondo bianco

Ma meglio cambiarlo.


Perfetto! Quella era la pace mancante. Nessuna riga di codice aggiuntiva necessaria!
Morpheus78

3

Primo set

tableView.backgroundColor = [UIColor clearColor];

Secondo set

tableCell.backgroundColor = [UIColor clearColor];

3

crea IB Outlet per la visualizzazione tabella @IBOutlet weak var yourTable: UITableView!

in vista carico

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

se vuoi cancellare il colore di Cell, fallo anche in

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

Nella mia app, ho dovuto impostare il colore della backgroundColormia UITableViewCellclasse [UIColor clearColor]quando ho aggiornato per iOS 7.


2

Provare

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

E

cell.backgroundColor = [UIColor clearColor];

2

Nel mio caso la cella è stata creata utilizzando un xib. sembra che il generatore di interfacce su xcode5 abbia problemi a impostare clearColor su cell.backgroundColor.

Tutto quello che dovevo fare era davvero impostare

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

il controllo raggiunge la fine della funzione non nulla
ropo

2

Basta selezionare Cancella colore su Visualizza sfondo per la tabella e anche per la cella.


2

rapido 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Impostato

tableView.backgroundColor = [UIColor clearColor];

in viewDidLoad.

se non funziona, prova:

tableView.backgroundView = nil;

0

In swift 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.