UITableView backgroundCouleur toujours grise sur iPad


128

Lorsque je règle le backgroundColorpour mon, UITableViewcela fonctionne bien sur iPhone (appareil et simulateur) mais PAS sur le simulateur iPad. Au lieu de cela, j'obtiens un fond gris clair pour toutes les couleurs que j'ai définies, y compris groupTableViewBackgroundColor.

Étapes à suivre pour reproduire:

  1. Créez un nouveau projet basé sur la navigation.
  2. Ouvrez RootViewController.xib et définissez le style de vue de table sur "Groupé".
  3. Ajoutez ce répondeur au RootViewController:

    - (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];
    }
  4. Sélectionnez Simulator SDK 3.2, créez et exécutez.
  5. Vous obtiendrez un fond 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. Construisez et exécutez.
  9. Vous obtiendrez un fond gris clair.
  10. Rétablissez le style de vue du tableau sur Plain et vous obtiendrez un arrière-plan noir.

Merci de votre aide!


2
Ah, maintenant iPhone et iPad alignés à nouveau ici dans iOS6 :-)
Gerd

3
Bravo pour avoir utilisé les termes rarement utilisés "Etapes à reproduire"! :-p
Constantino Tsarouhas

Réponses:


245

Essayez l'un de ceux-ci.

[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

30
TRÈS TRÈS IMPORTANT: cela ne fonctionne qu'avec le SDK 3.2. Pour une compatibilité descendante avec 3.1.3. et auparavant, 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 plantera et se fermera brusquement, vous pouvez me faire confiance!
rjobidon

1
oui, j'ai essayé la solution ci-dessus et cela a fonctionné pour moi. Quelqu'un peut-il me dire quel est réellement ce problème. Pourquoi lorsque nous exécutons l'application, elle est grisée?
Naveen

S'il vous plaît quelqu'un nous dire pourquoi cela est nécessaire pour résoudre ce problème?
mask8

car clairement le nouvel ios vous permet de mettre une vue en arrière-plan. Pourquoi son réglage sur une vue grise n'est qu'un problème introduit par Apple. très étrange, très stupide. Mais là encore, c'est tous les jours que je rencontre quelque chose d'étrange et de stupide en codant pour iOS
The Lazy Coder

30

Merci beaucoup pour cette solution. J'ai appliqué cela sur une propriété UITableView avec IBOutlet dans un UIViewController et cela fonctionne bien comme:

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

il n'y a pas besoin de la ligne médiane [panelTable setBackgroundView: [[[UIView alloc] init] autorelease]];
NIKHIL

4
Freezing Fire: en fait, il y en a. Sans cela, vous obtenez des artefacts de dessin étranges dans les bordures des cellules du tableau.
Hilton Campbell

6

Sur iPad, la backgroundViewpropriété semble être utilisée pour créer la couleur de fond gris pour les tableaux groupés. Donc, pour changer la couleur d'arrière-plan des tableaux groupés sur iPad, vous devez nildésactiver la backgroundViewpropriété, puis définir la backgroundColorvue de tableau 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];
}

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

2

Je pense qu'il convient de noter qu'à partir de Xcode 6.1 et iOS 8.1, en particulier pour iPad (si vous souhaitez également définir l'arrière-plan de la cellule), il semble que vous deviez définir l'arrière-plan du tableau ET l'arrière-plan de la cellule.

Par exemple, sur un storyboard iPhone, vous pouvez définir une cellule pour effacer la couleur, puis définir l'image d'arrière-plan de la table par programmation pour une table transparente avec une image d'arrière-plan. Cependant, si vous deviez afficher cette même configuration sur iPad, les cellules ne seraient pas claires. Les cellules devront être définies pour être effacées par programmation pour iPad.


Je vois ce problème pour les applications créées avec Xcode 6.4 et exécutées sur iOS 9.2. J'ai défini les couleurs d'arrière-plan de mes cellules de vue de tableau (statiques) sur effacer dans Interface Builder, et elles semblaient claires sur iPhone, mais sur iPad, elles étaient blanches jusqu'à ce que je définisse les couleurs d'arrière-plan des cellules pour effacer dans la -viewDidLoad:méthode de mon contrôleur de vue .
Greg

1

essayé de définir backgroundColor et View pour la table, n'a pas eu de chance (simulateur iPad Xcode 5 iOS7.1), avait l'air OK pour iPhone, mais couleur de fond gris clair sur iPad ...

travailler avec backgroundColor pour la cellule elle-même a corrigé 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;

}


0

Si votre application cible à la fois l'iPhone et l'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 l'allocation TableView n'a pas de libération automatique 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 fond blanc au lieu de gris clair.

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

0
  • Simuler l'iPad 2
  • Exécution d'iOS 7.1 à 8.3
  • Construit à partir de XCode 6.3

Rien de ce qui précède n'a fonctionné pour mon UIViewController-> UITableView spécifié à l'aide d'un seul XIB. Ce qui a fonctionné a été de déplacer l'ensemble de la configuration dans un Storyboard et de définir la couleur d'arrière-plan à l'aide de l'inspecteur IB.


0

J'ai aussi ce genre de problème. La UITableViewcouleur d'arrière-plan sera toujours, groupTableViewBackgroundColorpeu importe ce que j'ai défini.

Le symptôme est comme ce problème - UITableView réinitialise sa couleur d'arrière-plan avant que la vue n'apparaisse

Après avoir défini la couleur d'arrière-plan en initfonction, c'est correct. Dans viewDidLoadet sur viewWillAppearscène, c'est correct. Cependant, dans viewDidAppear, la couleur d'arrière-plan est réinitialisée à sa couleur par défaut.

La réponse acceptée ne fonctionne pas maintenant.

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

Voici ma solution. Définissez simplement la couleur d'arrière-plan de tableView dans viewDidLoadfunction plutôt que initou viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.