UITableView fond clair


90

Je me rends compte qu'iOS 7 n'est pas officiellement sorti et nous ne devrions pas en discuter MAIS je deviens fou en essayant de résoudre ce problème. Sur iOS 6, ma vue de table était transparente et avait l'air superbe. Première exécution d'iOS 7 et l'arrière-plan est blanc.

J'ai essayé de rendre le backgroundColor du tableau, la couleur de la cellule, etc. en UIColor clearColor mais je n'ai aucun changement.

Comment résoudre ce problème?

la table


1
Vous avez essayé de mettre la table backgroundViewsur une table claire?
Annuler

Pourriez-vous montrer le code où vous définissez la couleur d'arrière-plan? Qu'en est-il de la vue des parents? Peut-être que l'arrière-plan de la vue du tableau est clair, mais le parent ne l'est pas?
sooper

J'ai remarqué la même chose, mais lorsque j'ai installé la même application qui était antérieure à ma version actuelle d'iOS 7.0, cela ne se produisait pas. Ce problème réside-t-il alors dans xCode5.0?
Totumus Maximus

Réponses:


123
    // Fix for iOS 7 to clear backgroundColor
    cell.backgroundColor = [UIColor clearColor];
    cell.backgroundView = [[UIView new] autorelease];
    cell.selectedBackgroundView = [[UIView new] autorelease];

dans cellForRowAtIndexPath

Assurez-vous également que votre tableview a réellement un arrière-plan transparent (dans le storyboard): entrez la description de l'image ici


George, ajoutez ce code à l'intérieur de la méthode - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath
IanStallings

1
Pour les cas, si vous avez vraiment besoin de selectedBackgroundView, vous pouvez mettre ce qui suit dans cellForRowAtIndexPath: cell.selectedBackgroundView = [[[UIImageView alloc] initWithImage: [UIImage imageNamed: @ "yourBgImage.png"]] autorelease]; ou même dans awakeFromNib: self.selectedBackgroundView = ... Notez que: self.backgroundColor = [UIColor clearColor]; ne fonctionne pas dans awakeFromNib sous iOS7. Mais: cell.backgroundColor = [UIColor clearColor]; fonctionne correctement uniquement dans cellForRowAtIndexPath pour iOS 7.0
slamour

11
Il suffit d'ajouter la ligne: cell.backgroundColor = [UIColor clearColor];
evya

Cela fonctionne comme charm cell.backgroundColor = [UIColor clearColor];
bpolat

Comment faire cela dans Swift?
Qadir Hussain

58

Mettez ceci:

cell.backgroundColor = [UIColor clearColor];

Dans cette section:

cellForRowAtIndexPath

1
Dans iOS 6, il suffit de définir backgroundViewune vue vide, mais ce code supplémentaire est nécessaire pour iOS 7.
Kevin Borders

25

Essayez d'abord de définir backgroundView sur nil.

[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];

Je ne sais pas s'il s'agit d'un changement dans la documentation avec iOS7 ou s'il a toujours été là et n'a tout simplement pas affecté la couleur d'arrière-plan, mais par UITableView Class Reference @property backgroundView

"Vous devez définir cette propriété sur nil pour définir la couleur d'arrière-plan de la vue tableau."

edit: syntaxe de code corrigée


25

Cela a été répondu, mais de manière incorrecte à bien des égards.

Vous devez implémenter la méthode de délégation ci-dessous:

    - (void)tableView:(UITableView *)tableView  willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
}

Vous ne pouvez pas mettre le correctif dans cellForRowAtIndexPath car c'est après le rendu de la cellule, et il clignotera un fond blanc avant que l'arrière-plan ne soit défini pour effacer (sur les appareils plus lents).

Utilisez cette méthode déléguée et vos problèmes sont résolus!


1
Oui. Pour iOS 7, c'est le moyen d'effacer l'arrière-plan. Toutes les autres suggestions ci-dessus peuvent ne pas fonctionner.
girish_vr

15

En fait, l'emplacement officiellement correct pour changer la couleur d'arrière-plan de la cellule est différent selon la documentation ( UITableViewCell Class Reference ):

Que vous utilisiez une cellule prédéfinie ou personnalisée, vous pouvez modifier l'arrière-plan de la cellule à l'aide de la propriété backgroundView ou en modifiant la propriété backgroundColor héritée. Dans iOS 7, les cellules ont un fond blanc par défaut; dans les versions antérieures d'iOS, les cellules héritent de la couleur d'arrière-plan de la vue de tableau englobante. Si vous souhaitez modifier la couleur d'arrière-plan d'une cellule, faites-le dans tableView: willDisplayCell: forRowAtIndexPath: méthode de votre délégué de vue de table.


J'essaye ceci, mais les toutes premières cellules montrées ont toutes un fond blanc. Si je crée de nouvelles cellules en faisant défiler, elles auront le fond transparent que je veux. Je ne sais pas quoi essayer d'autre…
David Dunham

Qu'à cela ne tienne, cela semble être un problème de timing. Je faisais des trucs dans awakeFromNib, ce qui était trop tôt.
David Dunham


6

C'est un problème assez frustrant. Voici ma solution actuelle:

Ajoutez ceci à votre UITableViewCellsous - classe.

- (void)didMoveToSuperview {
    [super didMoveToSuperview];

    self.backgroundColor = [UIColor clearColor];
}

Oh mon Dieu. Je vous remercie. J'ai sauvé ma nuit. Votre réponse aurait dû être acceptée.
Michal Shatz

5

Cela a fonctionné pour moi dans iOS7 +:

self.tableView.backgroundColor =[UIColor blueColor];
self.tableView.opaque = NO;
self.tableView.backgroundView = nil;`

puis dans cellForRowAtIndexPath:

cell.backgroundColor = [UIColor clearColor];

4

essayez cet extrait de code

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];

4

Cela n'a fonctionné pour moi que lorsque j'ai modifié une couleur d'arrière-plan claire pour chaque cellule et une couleur claire pour le tableau lui-même.

pour définir la couleur claire du tableau:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    initMenu()
    myTableView.backgroundColor = UIColor.clearColor()
}

pour définir la couleur des cellules:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("tablecellid", forIndexPath: indexPath)
    cell.backgroundColor = UIColor.clearColor()
    return cell
}

3

Une chose à bien. La couleur par défaut de UITable semble être le blanc (je ne sais pas pourquoi)

Fond blanc

Mais mieux vaut changer cela.


Parfait! C'était la paix manquante. Aucune ligne de code supplémentaire nécessaire!
Morpheus78

3

Premier set

tableView.backgroundColor = [UIColor clearColor];

Deuxième set

tableCell.backgroundColor = [UIColor clearColor];

3

créer IB Outlet pour la vue de table @IBOutlet faible var yourTable: UITableView!

en vue de la charge

override func viewDidLoad() {
    yourTable.delegate = self
    yourTable.dataSource = self

    yourTable.backgroundColor = UIColor.clearColor()
}

si vous voulez effacer la couleur de la cellule, faites-le également dans

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    cell.backgroundColor = UIColor.clearColor() 

}

2

Dans mon application, j'ai dû définir la couleur de backgroundColorma UITableViewCellclasse [UIColor clearColor]lors de la mise à jour pour iOS 7.


2

Essayer

[myTable setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[myTable setSeparatorInset:UIEdgeInsetsZero];

Et

cell.backgroundColor = [UIColor clearColor];

2

Dans mon cas, la cellule a été créée à l'aide d'un xib. il semble que le constructeur d'interface sur xcode5 ait du mal à définir clearColor sur cell.backgroundColor.

Tout ce que j'avais à faire était en effet de définir

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// get the cell from the nib
//then force the backgroundColor
cell.backgroundColor = [UIColor clearColor]
return cell;
}

le contrôle atteint la fin de la fonction non annulée
ropo

2

Sélectionnez simplement Clear Color on View Background pour le tableau et pour la cellule également.


2

rapide 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}

1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];

0

Ensemble

tableView.backgroundColor = [UIColor clearColor];

dans viewDidLoad.

si cela ne fonctionne pas, essayez:

tableView.backgroundView = nil;

0

Dans Swift 3

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath)
    cell.backgroundColor = .clear
    cell.backgroundView = UIView()
    cell.selectedBackgroundView = UIView()
    return cell
}
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.