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

Teddy13
la source
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

slameur
la source
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
Maximus Vermillion
la source
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

dandan
la source
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!

attraper
la source
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.

asdusd
la source
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
7

swift 3, 4 et 5

cell.backgroundColor = UIColor.clear
Jamal alayq
la source
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];
}
Berk
la source
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];
DevC
la source
4

essayez cet extrait de code

cell.contentView.backgroundColor = [UIColor clearColor];
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:0.5];
Marco Antonio Uzcategui Pescoz
la source
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
}
SoliQuiD
la source
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.

Paul Brewczynski
la source
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];
Fantasyczl
la source
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() 

}
veenaay pawar
la source
2

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

Arthur Dexter
la source
2

Essayer

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

Et

cell.backgroundColor = [UIColor clearColor];
Jorgy
la source
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;
}
Ben G
la source
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.

Walter Barlet
la source
2

rapide 3

override func viewDidLoad() {
        super.viewDidLoad()
        tableView.backgroundColor = UIColor.clear
}
MrMins
la source
1
// Fix iOS 7 clear backgroundColor compatibility 
// I Think this two lines only are enough

cell.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = [[UIView new] autorelease];
Kiran Jasvanee
la source
0

Ensemble

tableView.backgroundColor = [UIColor clearColor];

dans viewDidLoad.

si cela ne fonctionne pas, essayez:

tableView.backgroundView = nil;
Lal Krishna
la source
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
}
Patricio Bravo
la source