UITableView backgroundColor toujours blanc sur iPad

Je travaille sur un projet. J'ai beaucoup de UITableView s qui sont définies comme couleur claire. La couleur de fond de leurs vues est définie sur ma couleur personnalisée et tout va bien sur iPhone .

Le problème se pose sur iPad ! J'ai essayé presque tout, mais mon UITableView a une couleur blanche.

J'ai vérifié les autres sujets, comme: UITableView backgroundColor toujours gris sur iPad , mais rien n'a fonctionné. De plus, mon problème n'est pas gris, c'est blanc comme neige!

Quelle pourrait en être la raison?

Bonne nouvelle: Selon les notes de version, pour iOS 10:

Lors de l'exécution sur iPad, le jeu de colors d'arrière-plan pour un UITableViewCell dans un Storyboard est maintenant respecté.

Pour les versions <10:

Je voyais cela dans iOS 8 (8.3). Même si dans IB, mes cellules étaient de «couleur claire» et que leurs vues de contenu étaient «de couleur claire», elles devenaient blanches. Une solution imparfaite mais raisonnable, puisqu'elle prend encore des valeurs de IB:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... cell.backgroundColor = cell.contentView.backgroundColor; return cell; } 

Il semble que mes cellules réutilisables dequeued obtiennent leur fond forcé à blanc sur iPad. J'ai été en mesure de déterminer cela en utilisant le débogueur de vue hiérarchie.

Une fois cela fait, j'ai pu utiliser la couleur d'arrière-plan de la table et ne pas avoir à définir une vue en arrière-plan, bien que cela fonctionne également.

Vous pouvez résoudre ce problème en définissant un paramètre d'API d'apparence dans votre file appDelegate:

Rapide:

 UITableViewCell.appearance().backgroundColor = UIColor.clearColor() 

Au lieu de définir la couleur d'arrière-plan, essayez d'utiliser une vue en arrière-plan à la place, comme ceci:

 - (void)viewDidLoad { self.tableView.backgroundView = [UIView new]; self.tableView.backgroundView.backgroundColor = [UIColor clearColor]; } 

J'ai eu des problèmes où l'utilisation de backgroundColor ne produit pas toujours un effet, mais la définition d'une vue en arrière-plan fonctionne à la place.

Construire de la réponse de Ben Flynn … La couleur de fond de cell.contentView n'est pas nécessairement égale à la couleur cell.background. Dans ce cas, j'ai trouvé que cela a fonctionné dans la résolution du problème de fond blanc de l'iPad dans plus de situations:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... cell.backgroundColor = cell.backgroundColor; return cell; } 

Alors que la déclaration semble ridicule et folle … elle résout le problème.

J'ai une vue de table avec beaucoup de différentes cellules à l'intérieur, chacune a une couleur différente.

La réponse de @Ben Flynn cell.backgroundColor = self.contentView.backgroundColor ne peut pas y parvenir. La raison est self.contentView.backgroundColor est nul, ce que vous avez fait est juste effacer la cell.backgroundColor = nil .

Fondamentalement, c'est le bug de Xcode (je pense, oui, ça craint!), cell.backgroundColor toujours la couleur, mais il ne peut pas afficher.

Après un debugging pendant un certain time, basé sur @Ray W réponse, voici ma solution.

 @impelement YouCustomCellClass - (void)awakeFromNib { [super awakeFromNib]; self.backgroundColor = self.backgroundColor; // What the heck?? But it is. } @end 

Dans mon expérience, certaines versions d'iOS définissent backgroundColor de UITableViewCell avant d'appeler tableView:willDisplayCell:forRowAtIndexPath: du tableView:willDisplayCell:forRowAtIndexPath: Réinitialiser à votre couleur personnalisée dans cette méthode le fixe.

Cela résout ce problème pour moi

  func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { tableView.backgroundColor = UIColor.clear } 

SWIFT 3.XX

Mettez ceci

 UITableViewCell.appearance().backgroundColor = UIColor.clear 

Dans AppDelegate

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

J'utilise Storyboard avec UITableViewControlrs , donc la décision la plus simple était de sous- UITableViewControlrs tous les controllers, et d'append cette méthode au parent

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad){ cell.backgroundColor = [UIColor clearColor]; } } 

RAPIDE

C'était aussi un événement pour moi. Ma vue de table dans mon SWRevealViewController est apparue blanche sur mon iPad quand elle semblait claire (ce que je voulais avec une image de fond) sur mon iPhone. J'ai essayé tout ce qui précède mais c'est ce qui a fini par travailler pour moi dans mon viewDidLoad ().

 tableView.backgroundView = UIImageView(image: UIImage(named: "gray")) tableView.backgroundView?.backgroundColor = .clearColor() UITableViewCell.appearance().backgroundColor = .clearColor() 

Swift 3.1

J'ai travaillé autour de ce bogue en le plaçant dans ma sous-class UITableViewCell :

Lorsque la cellule est en cours de chargement à partir du file NIB:

 override func awakeFromNib() { super.awakeFromNib() self.backgroundColor = UIColor.clear } 

et quand la cellule est réutilisée par le système

 override func prepareForReuse() { super.prepareForReuse() self.backgroundColor = UIColor.clear } 

iOS 10 est censé résoudre ce problème dans Interface Builder, comme l' a dit animeshporwal .

Cela peut être réalisé dans un Storyboard comme suit:

  • Afficher les grandes lignes du document pour votre storyboard
  • Dans votre tableau, choisissez un TableViewCell
  • aller à la vue de contenu dans cette cellule
  • Définissez la couleur d'arrière-plan de la vue Contenu.

Résultat: les vues du simulateur iPad et iPhone se ressemblent

J'ai juste eu ce problème et l'ai fixé en changeant le backgroundColor de la vue (par opposition à celui de la tableView). Semble sur iPad, c'est celui qui est utilisé en premier et dans mon cas, il était blanc.

SWIFT J'ai aussi eu ce problème. Fonctionne bien sur .phone mais tableViewCells devient blanc sur .pad. Je pensais montrer comment je l'ai réparé en utilisant swift.

Connectez la tableViewCell à viewController.swift en tant que @IBOutlet comme ceci:

  @IBOutlet weak var tvc1: UITableViewCell! @IBOutlet weak var tvc2: UITableViewCell! @IBOutlet weak var tvc3: UITableViewCell! 

Ensuite, dans viewDidLoad mettre ce qui suit:

 tvc1.backgroundColor = tvc1.backgroundColor tvc2.backgroundColor = tvc2.backgroundColor tvc3.backgroundColor = tvc3.backgroundColor 

Très étrange, je ne sais pas ce qui se passe ici, mais cela a résolu pour moi.

Cela semble être corrigé avec iOS 10 Beta 4 comme mentionné dans les notes de publication sous les notes UIKit :

entrez la description de l'image ici

J'ai une vue de table transparente avec des cellules de vue de table semi-transparentes. Je définis la couleur d'arrière-plan de la vue Table pour effacer lorsque je crée la table. Cela fonctionne pour toutes les combinaisons iOS / appareil sauf iPad + iOS 8, où la couleur de fond rest blanche.

Pour moi, définir la couleur d'arrière-plan de la cellule sur semi-transparent et la couleur d'arrière-plan de vue de contenu pour effacer fonctionne, puisque je le fais sur chaque tableView(_ tableView: UITableView, cellForRowAt indexPath) . Le problème pour moi était seulement que l'arrière-plan de la vue de la table est resté blanc.

J'ai essayé toutes les combinaisons que j'ai trouvées concernant ce problème, mais la seule chose dont j'avais réellement besoin était de définir l'arrière-plan des vues de table sur transparent sur chaque tableView(_ tableView: UITableView, cellForRowAt indexPath) . Pas super-intuitif, mais au less cela fonctionne. : P