UITableView backgroundColor sempre grigio su iPad


128

Quando imposto il backgroundColorper il mio UITableViewfunziona bene su iPhone (dispositivo e simulatore) ma NON sul simulatore iPad. Invece ottengo uno sfondo grigio chiaro per qualsiasi colore impostato compreso groupTableViewBackgroundColor.

Passaggi per riprodurre:

  1. Crea un nuovo progetto basato sulla navigazione.
  2. Apri RootViewController.xib e imposta lo stile di visualizzazione della tabella su "Raggruppato".
  3. Aggiungi questo responder al RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Selezionare Simulator SDK 3.2, compilare ed eseguire.
  5. Otterrai uno sfondo nero (dispositivo e simulatore).
  6. Seleziona il tuo obiettivo nella struttura del progetto.
  7. Fare clic su Progetto: Aggiorna obiettivo corrente per iPad.
  8. Costruisci ed esegui.
  9. Otterrai uno sfondo grigio chiaro.
  10. Ripristina lo stile di visualizzazione della tabella su Semplice e otterrai uno sfondo nero.

Grazie per l'aiuto!


2
Ah, ora iPhone e iPad si sono allineati di nuovo qui in iOS6 :-)
Gerd,

3
Bravo per aver usato i termini usati di rado "Passaggi per riprodurre"! :-p
Constantino Tsarouhas,

Risposte:


245

Prova uno di questi.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];

3
Non so se ci sono effetti collaterali ma funziona! Grazie! self.tableView.backgroundView = zero;
rjobidon,

30
MOLTO MOLTO IMPORTANTE: funziona solo con SDK 3.2. Per compatibilità con le versioni precedenti 3.1.3. e in precedenza è necessario verificare se la vista tabella risponde alla proprietà backgroundView: if ([self.tableView respondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; altrimenti la tua app andrà in crash e si chiuderà improvvisamente, puoi fidarti di me!
rjobidon,

1
sì, ho provato la soluzione sopra e ha funzionato per me. Qualcuno può dirmi che cos'è questo problema in realtà. Perché quando eseguiamo l'app, è disattivata?
Naveen,

Per favore qualcuno ci dica perché questo è necessario per risolvere questo problema?
mask8

perché chiaramente il nuovo iOS ti consente di mettere una vista di sfondo. Perché è impostato su una vista grigia è solo un problema introdotto da Apple. molto strano, molto stupido. Ma poi di nuovo è ogni giorno che incontro qualcosa di strano e stupido mentre codifico per iOS
The Lazy Coder

30

Grazie mille per questa soluzione. Ho applicato questo su una proprietà UITableView con IBOutlet in un UIViewController e funziona bene come:

[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent

non è necessario per la linea di mezzo [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL

4
Freezing Fire: in realtà c'è. Senza di essa, ottieni strani artefatti di disegno nei bordi delle celle della tabella.
Hilton Campbell,

6

Su iPad la backgroundViewproprietà sembra essere utilizzata per creare il colore di sfondo grigio per le tabelle raggruppate. Quindi, per cambiare il colore di sfondo per le tabelle raggruppate su iPad, si dovrebbe niluscire dalla backgroundViewproprietà e quindi impostare la backgroundColorvista tabella desiderata.

- (void)viewDidLoad
{
    [super viewDidLoad];

    // If you need to support iOS < 3.2, check for the availability of the
    // backgroundView property.
    if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
        self.tableView.backgroundView = nil;
    }
    self.tableView.backgroundColor = [UIColor whiteColor];
}

Sì, questo controllo dovrebbe essere aggiunto per supportare iOS precedenti.
Karim,

2

Penso che valga la pena notare che a partire da Xcode 6.1 e iOS 8.1, in particolare per iPad (se si desidera impostare anche lo sfondo della cella) sembra che sia necessario impostare lo sfondo della tabella E lo sfondo della cella.

Ad esempio, su uno storyboard per iPhone puoi impostare una cella per cancellare il colore, quindi impostare l'immagine di sfondo della tabella a livello di codice per una tabella trasparente con immagine di sfondo. Tuttavia, se dovessi visualizzare questa stessa configurazione su iPad, le celle non sarebbero chiare. Le celle dovranno essere impostate per cancellare programmaticamente per iPad.


Sto riscontrando questo problema per le app create con Xcode 6.4 e in esecuzione su iOS 9.2. Ho impostato i colori di sfondo delle mie celle di visualizzazione tabella (statici) su Clear in Interface Builder e sono apparsi chiari su iPhone, ma su iPad erano bianchi fino a quando ho impostato i colori di sfondo delle celle per cancellare nel -viewDidLoad:metodo del mio controller di visualizzazione .
Greg,

1

provato a impostare backgroundColor e View per il tavolo, non ha avuto fortuna (simulatore iPad Xcode 5 iOS7.1), sembrava OK per iPhone, ma il colore di sfondo grigio chiaro su iPad ...

lavorare con backgroundColor per la cella stessa ha risolto questo problema per me su iOS 7.1 4/2014

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

        static NSString *CellIdentifier = @"ViewSomeTriggerCell";

        // get a cell or a recycled cell
        sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

        // put a picture and a word in the cell (positions set in .xib)
        NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
        cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
        cellTrigger.labelName.text = tname;

        // set background color, defeats iPad wierdness
        // http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad

        // clearColor is what I wanted, and it worked, also tested with purpleColor
        cellTrigger.backgroundColor =[UIColor clearColor];
        return cellTrigger;

}


0

Se la tua applicazione ha come target sia iPhone che iPad, puoi farlo in questo modo:

[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone

if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
    [myTableView setBackgroundView:nil];
    [myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only

Si noti che l'allocazione TableView non ha il rilascio automatico per ARC.


0

Se stai aggiungendo un UIViewController a un altro UIViewController devi anche impostare lo sfondo della tua vista su clearColor oltre a UITableView, altrimenti otterrai uno sfondo bianco anziché grigio chiaro.

if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
    [myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];

0
  • Simulazione di iPad 2
  • Esecuzione di iOS 7.1 tramite 8.3
  • Costruito da XCode 6.3

Nessuna delle precedenti ha funzionato per il mio UIViewController-> UITableView specificato usando un singolo XIB. Ciò che ha funzionato è stato spostare l'intero setup in uno Storyboard e impostare il colore di sfondo usando l'ispettore IB.


0

Ho anche avuto questo tipo di problema. Il UITableViewcolore di sfondo sarà sempre groupTableViewBackgroundColorqualunque cosa io abbia impostato.

Il sintomo è simile a questo problema: UITableView sta ripristinando il colore di sfondo prima che appaia la vista

Dopo aver impostato il colore di sfondo in initfunzione, è corretto. In viewDidLoade viewWillAppearfase, è corretto. Tuttavia, in viewDidAppear, il colore di sfondo viene ripristinato al colore predefinito.

La risposta accettata non funziona ora.

[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];

Ecco la mia soluzione Basta impostare il colore di sfondo del tableView in viewDidLoadfunzione piuttosto che inito viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
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.