Je travaille sur un projet. J'ai beaucoup de UITableView
qui sont définis comme couleur claire. La couleur d'arrière-plan 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: ITableView 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, la couleur d'arrière-plan définie pour une UITableViewCell dans un Storyboard est désormais respectée.
Pour les versions <10:
Je voyais cela dans iOS 8 (8.3). Même si dans IB, mes cellules étaient de "couleur claire" et leurs vues de contenu étaient de "couleur claire", elles restituaient le blanc. Une solution imparfaite mais raisonnable, car elle prend toujours des valeurs d'IB:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
cell.backgroundColor = cell.contentView.backgroundColor;
return cell;
}
Il semble que mes cellules réutilisables retirées de la file d'attente soient forcées de fond sur l'iPad. J'ai pu le déterminer à l'aide du débogueur de hiérarchie de vues.
Une fois que j'ai fait cela, j'ai pu utiliser la couleur d'arrière-plan du tableau et je n'ai pas eu à définir une vue d'arrière-plan, bien que cela fonctionne également.
Vous pouvez résoudre ce problème en créant un paramètre d'API d'apparence dans votre fichier appDelegate:
Rapide:
UITableViewCell.appearance().backgroundColor = UIColor.clearColor()
Au lieu de définir la couleur d'arrière-plan, essayez plutôt d'utiliser une vue d'arrière-plan, 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 d'arrière-plan fonctionne à la place.
À partir de la réponse de Ben Flynn ... la couleur d'arrière-plan cell.contentView n'est pas nécessairement égale à la couleur cell.background. Dans ce cas, j'ai constaté que cela fonctionnait pour résoudre le 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;
}
Bien que la déclaration semble ridicule et folle ... elle résout le problème.
J'ai une vue de table avec de nombreuses cellules différentes à 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, donc ce que vous avez fait est simplement de supprimer le cell.backgroundColor = nil
.
Fondamentalement, c'est le bug de Xcode (je pense que oui, ça craint!), cell.backgroundColor
a toujours une couleur, mais il ne peut pas s'afficher.
Après un débogage pendant un certain temps, basé sur la réponse @Ray W, voici ma solution.
@impelement YouCustomCellClass
- (void)awakeFromNib {
[super awakeFromNib];
self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}
@end
Cela résout ce problème pour moi
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
tableView.backgroundColor = UIColor.clear
}
D'après mon expérience, certaines versions d'iOS définissent backgroundColor d'UITableViewCell avant d'appeler le tableView:willDisplayCell:forRowAtIndexPath:
. La réinitialisation de votre couleur personnalisée dans cette méthode le corrige.
Swift 3.XX
Mettez ça
UITableViewCell.appearance().backgroundColor = UIColor.clear
Dans AppDelegate
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
J'ai contourné ce bogue en le plaçant dans ma sous-classe UITableViewCell
:
Lorsque la cellule est chargée à partir du fichier NIB:
override func awakeFromNib() {
super.awakeFromNib()
self.backgroundColor = UIColor.clear
}
et lorsque 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.
J'utilise Storyboard
avec UITableViewControlrs
, donc la décision la plus simple a été de sous-classer tous les contrôleurs et d'ajouter 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
Cela m'arrivait aussi. Ma vue de table dans mon SWRevealViewController est apparue blanche sur mon iPad quand elle était claire (c'est ainsi que je le voulais avec une image d'arrière-plan) sur mon iPhone. J'ai essayé tout ce qui précède, mais c'est ce qui a fini par fonctionner pour moi dans mon viewDidLoad ().
tableView.backgroundView = UIImageView(image: UIImage(named: "gray"))
tableView.backgroundView?.backgroundColor = .clearColor()
UITableViewCell.appearance().backgroundColor = .clearColor()
Je viens d'avoir ce problème et je l'ai résolu en changeant la couleur de fond de la vue (par opposition à celle de la tableView). Semble sur iPad, c'est celui qui est utilisé en premier et dans mon cas, il a été réglé sur 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 corrigé en utilisant Swift.
Connectez la tableViewCell au 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, mettez 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 l'a résolu pour moi.
Ceci peut être réalisé dans un Storyboard comme suit:
Résultat: les vues des simulateurs iPad et iPhone se ressemblent
J'ai une vue de table transparente avec des cellules de vue de table semi-transparentes. J'ai défini la couleur d'arrière-plan de la vue de table pour qu'elle s'efface lorsque je crée la table. Cela fonctionne pour toutes les combinaisons iOS/appareil sauf iPad + iOS 8, où la couleur d'arrière-plan reste 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 la vue de contenu sur Clear fonctionne, car 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 table restait blanc.
J'ai essayé toutes les combinaisons que j'ai trouvées concernant ce problème, mais la seule chose que je devais réellement faire était de définir l'arrière-plan vues de table sur chaque tableView(_ tableView: UITableView, cellForRowAt indexPath)
. Pas super intuitif, mais au moins ça marche. : P