web-dev-qa-db-fra.com

UITableView backgroundColor toujours gris sur iPad

Lorsque je configure le backgroundColor pour mon UITableView cela fonctionne très 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 à 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 Project: Upgrade Current Target for iPad.
  8. Construisez et exécutez.
  9. Vous obtiendrez un fond gris clair.
  10. Rétablissez le style d'affichage de la table sur Normal et vous obtiendrez un fond noir.

Merci de votre aide!

128
rjobidon

Essayez-en un.

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

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
30
Alexander

Sur iPad, la propriété backgroundView semble être utilisée pour créer la couleur d'arrière-plan grise des tableaux groupés. Ainsi, pour changer la couleur d'arrière-plan des tableaux groupés sur iPad, il faut nil sortir la propriété backgroundView puis définir 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];
}
6
Philipp Frischmuth

Je pense qu'il convient de noter qu'à partir de Xcode 6.1 et iOS 8.1, spécifiquement pour iPad (si vous souhaitez également définir l'arrière-plan des cellules), il semble que vous devez définir l'arrière-plan du tableau ET l'arrière-plan des cellules.

Par exemple, sur un storyboard iPhone, vous pouvez définir une couleur claire pour la cellule, puis définir l'image d'arrière-plan du tableau par programmation pour un tableau transparent 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 s'effacer par programmation pour iPad.

2
WiseGuy

essayé de définir backgroundColor et View pour la table, n'a pas eu de chance (simulateur iPad Xcode 5 iOS7.1), semblait OK pour iPhone, mais la 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;

}

1
cube108

J'ai aussi eu ce genre de problème. La couleur d'arrière-plan UITableView sera toujours groupTableViewBackgroundColor peu importe ce que j'ai défini.

Le symptôme ressemble à ce problème - ITableView 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 dans la fonction init, elle est correcte. Aux étapes viewDidLoad et viewWillAppear, 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 la fonction viewDidLoad plutôt que init ou viewWillAppear.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.backgroundColor = [UIColor clearColor];
}
0
elegance66
  • 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é en utilisant un seul XIB. Ce qui a fonctionné, c'est de déplacer toute la configuration dans un Storyboard et de définir la couleur d'arrière-plan à l'aide de l'inspecteur IB.

0
QED

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 de gris clair.

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

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
gmogames