2010-04-22 3 views
128

Lorsque je définis le backgroundColor pour mon UITableView, il fonctionne très bien sur iPhone (appareil et simulateur) mais PAS sur le simulateur d'iPad. Au lieu de cela, j'obtiens un arrière-plan gris clair pour toutes les couleurs que j'ai définies, y compris groupTableViewBackgroundColor.UITableView backgroundColor toujours gris sur l'iPad

Étapes pour reproduire:

  1. Créer un nouveau projet basé navigation.
  2. Ouvrez RootViewController.xib et définissez le style de vue de table sur "Groupé".
  3. Ajouter ce répondeur à l'RootViewController:

    - (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor blackColor]; 
    }
  4. Sélectionnez SDK Simulator 3.2, construire et exécuter.
  5. Vous obtiendrez un arrière-plan noir (appareil et simulateur).
  6. Sélectionnez votre cible dans l'arborescence du projet.
  7. Cliquez sur Projet: Mettre à niveau la cible actuelle pour iPad.
  8. Construire et exécuter.
  9. Vous obtiendrez un arrière-plan gris clair.
  10. Rétablissez le style de vue de la table sur Normal et vous obtiendrez un arrière-plan noir.

Merci pour votre aide!

+2

Ah, maintenant iPhone et iPad alignés ici encore dans iOS6 :-) – Gerd

+3

Bravo pour l'utilisation des termes rarement utilisés "Étapes à reproduire"! :-p –

Répondre

245

Essayez l'une d'entre elles.

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

Je ne sais pas s'il y a des effets secondaires mais ça marche! Merci! self.tableView.backgroundView = nil; – rjobidon

+1

Wow ça marche! Pourquoi est-ce? –

+30

TRÈS TRÈS IMPORTANT: Cela ne fonctionne qu'avec le SDK 3.2. Pour la rétrocompatibilité avec 3.1.3. et plus tôt vous devez vérifier si la vue de table répond à la propriété backgroundView: if ([self.tableView respondsToSelector: @selector (backgroundView)]) self.tableView.backgroundView = nil; Sinon, votre application va planter et quitter brusquement, vous pouvez me faire confiance! – rjobidon

30

Merci beaucoup pour cette solution. Je appliqué ce sur une propriété UITableView avec IBOutlet dans un UIViewController et il fonctionne bien comme:

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

il n'y a pas besoin de la ligne du milieu [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]]; – NIKHIL

+4

Feu de congélation: en fait il y a. Sans cela, vous obtenez des artefacts de dessin bizarres dans les limites de la cellule du tableau. –

6

Sur la propriété iPad backgroundView semble être utilisé pour créer la couleur de fond gris pour les tables groupées. Donc, pour changer la couleur d'arrière-plan pour les tables groupées sur l'iPad, il faut nil sur la propriété backgroundView, puis définissez le backgroundColor sur la vue de table souhaitée.

- (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]; 
} 
+0

Oui, cette vérification doit être ajoutée pour prendre en charge les iOS précédents. – karim

0

Si vos cibles d'applications iPhone et iPad, vous pouvez le faire comme ceci:

[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 

Notez que les alloc TableView ne pas autorelease pour ARC.

0

Si vous ajoutez un UIViewController à un autre UIViewController, vous devez également définir l'arrière-plan de votre vue sur clearColor en plus de UITableView, sinon vous obtiendrez un arrière-plan blanc au lieu du gris clair.

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

essayé de placer backgroundColor et Vue sur la table, pas eu de chance (Xcode 5 simulateur iOS7.1 iPad), avaient l'air bien pour l'iPhone, mais la couleur de fond gris clair sur iPad ...

travailler avec backgroundColor pour la cellule elle-même fixé cela pour moi sur 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; 

}

2

Je pense qu'il est intéressant de noter que de Xcode 6.1 et iOS 8.1, spécialement pour iPad (si vous voulez définir fond de la cellule, ainsi), il semble que vous devez définir l'arrière-plan de la table et fond de la cellule. Par exemple, sur un storyboard iPhone, vous pouvez définir une cellule pour effacer les couleurs, puis définir l'image d'arrière-plan de la table par programmation pour une table transparente avec l'image d'arrière-plan. Cependant, si vous visualisiez cette même configuration sur iPad, les cellules ne seraient pas claires. Les cellules devront être définies pour effacer par programmation pour iPad.

+0

Je vois ce problème pour les applications construites avec Xcode 6.4 et fonctionnant sur iOS 9.2. J'ai défini les couleurs d'arrière-plan des cellules de vue (statique) dans Interface Builder, et elles apparaissaient claires sur l'iPhone, mais sur l'iPad, elles étaient blanches jusqu'à ce que les couleurs d'arrière-plan des cellules soient effacées dans mon vue '-viewDidLoad:' méthode. – Greg

0
  • Simuler iPad 2
  • exécutant iOS 7.1 à 8.3
  • Construit à partir XCode 6,3

Aucune de ces travaillé pour mon UIViewController-> UITableView spécifié à l'aide d'un seul XIB au catalogue. Qu'est-ce que le travail consistait à déplacer l'ensemble de l'installation dans un Storyboard, et de définir la couleur de fond en utilisant l'inspecteur de l'IB.

Questions connexes