J'ai implémenté une classe de cellules de vue de tableau personnalisée qui hérite de UITableViewCell
. La table contient une image d'arrière-plan, je souhaite donc que l'arrière-plan de la cellule soit transparent. Il a l'air bien avant iOS7.
Cependant, dans iOS7, la cellule est toujours affichée avec un fond blanc.
Même pour Xcode7, 2015, there est un bogue dans le storyboard: vous devez définir la couleur d'arrière-plan d'une cellule dans le code.
Comme Apple DOC a déclaré ( Référence de la classe UITableViewCell ):
... 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 tabulaire englobante. Si vous souhaitez modifier la couleur d'arrière-plan d'une cellule, procédez de la manière suivante dans tableView: willDisplayCell: forRowAtIndexPath: méthode de votre délégué de vue de table.
Donc, dans mon cas, pour afficher les cellules avec un arrière-plan transparent, il suffit d'implémenter la méthode déléguée dans le contrôleur de vue tableau comme ci-dessous:
- (void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
[cell setBackgroundColor:[UIColor clearColor]];
}
Il suffit de noter : Comme @null l'a dit, "... il semble y avoir un bogue dans le constructeur d'interface ..." , je ne suis pas tout à fait sûr qu'il ait le bogue, mais il semble tellement parce que son commentaire a obtenu plusieurs votes positifs. Donc, il y a peut-être un problème si vous utilisez IB. :)
Je l'ai étudié un peu et j'ai découvert que la cellule backgroundColor est définie par le système Appearance. Ainsi, si toutes les cellules de votre application ont un fond clair, la solution la plus simple serait:
[[UITableViewCell appearance] setBackgroundColor:[UIColor clearColor]];
Et même s'ils ont un arrière-plan différent, la couleur claire semble être la plus pratique par défaut.
Ecrivez ceci dans votre méthode cellForRowAtIndexPath avant de retourner la cellule;
cell.backgroundColor = [UIColor clearColor];
J'ai en fait constaté que le problème venait de la couleur d'arrière-plan de UITableView qui n'était pas définie pour disparaître. Si vous modifiez la couleur d'arrière-plan de UITableViewCell en clair et que vous voyez toujours du blanc, assurez-vous que la couleur d'arrière-plan de UITableView est définie sur effacer (ou ce que vous voulez).
[self.tableView setBackgroundView:nil];
[self.tableView setBackgroundColor:[UIColor clearColor]];
dans Swift
tableView.backgroundView = nil
tableView.backgroundColor = UIColor.clearColor()
La couleur d'arrière-plan par défaut d'un UITableViewCell
dans iOS 7 est le blanc.
Vous devez définir la propriété backgroundColor
quelque part dans votre code. Par exemple, définissez-le après avoir créé la cellule.
cell.backgroundColor = [UIColor clearColor];
C'est définitivement un bogue iOS. Dans iOS 8, le réglage de la couleur d'arrière-plan dans Interface Builder
fonctionne bien pour l'iPhone, mais dans iPad, il s'agit toujours de whiteColor
. Pour résoudre ce problème, dans le message de source de données cellForIndexPath
, insérez-le dans:
cell.backgroundColor = cell.backgroundColor
Et ça va marcher. C’est exactement la raison pour laquelle j’ai dit que c’était un bogue, car le code lui-même est plutôt bullsh * t, mais cela fonctionne.
Il se peut que votre UITableViewCell soit sélectionnée par défaut .. Vous pouvez le confirmer en utilisant le nouveau débogueur visuel de Xcode 6 (ou recherchez la vue exacte qui provoque l’apparition de cette cellule blanche).
Fait intéressant, après avoir appris cela…, régler la couleur d'arrière-plan de la cellule sélectionnée pour qu'elle disparaisse n'a toujours pas fonctionné . je viens de modifier le style de sélection lors de la création de cette cellule personnalisée:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
// do customization here
}
self.selectionStyle = UITableViewCellSelectionStyleNone;
[self setBackgroundColor:[UIColor clearColor]];
return self;
}
J'ai trouvé qu'aucun de ce qui précède ne fonctionnait à partir de XCode 5.1.1, iOS 7.1.
Si vous utilisez Interface Builder avec des cellules prototypes, sélectionnez la cellule prototype, puis, dans le sélecteur d'attributs de la section Afficher, modifiez le fond par défaut de l'arrière-plan en Clear Color:
Cela semble bien fonctionner. Aucune des modifications de code ci-dessus n'est nécessaire non plus - il s'agit d'une solution purement IB.
Pour moi, régler cell.backgroundColor = cell.contentView.backgroundColor;
dans tableView:willDisplayCell:forRowAtIndexPath:
ou tableView:cell:forRowAtIndexPath:
a effectué le travail.
Cela est dû au fait que je définis la couleur d'arrière-plan de contentView dans Interface Builder.
La réponse acceptée n'a pas résolu le problème pour moi. Je devais faire ceci:
A partir de la méthode cellForRowAtIndexPath de la classe de source de données de la table:
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.backgroundColor = [UIColor clearColor]; //Make cell transparent
Avait un problème similaire, dû
ajoutez ceci au code pour le corriger
override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool {
var bgColorView: UIView = UIView()
bgColorView.backgroundColor = UIColor(red: (76.0 / 255.0), green: (161.0 / 255.0), blue: (255.0 / 255.0), alpha: 1.0)
bgColorView.layer.masksToBounds = true
tableView.cellForRowAtIndexPath(indexPath)!.selectedBackgroundView = bgColorView
return true
}
Solution Swift 1.2:
Ajoutez simplement une définition explicite de la couleur d’arrière-plan de votre cellule, comme suit:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// Configure the cell...
cell.backgroundColor = UIColor.clearColor()
return cell
}
Lors de l'ajout d'objets d'interface utilisateur à une cellule, Xcode 5/IOS 7 ajoute une nouvelle "Vue du contenu" qui sera la vue d'ensemble de tous les éléments de la cellule. Pour définir la couleur d'arrière-plan de la cellule, définissez la couleur d'arrière-plan de cette vue de contenu. Les solutions ci-dessus n'ont pas fonctionné pour moi, mais celui-ci a bien fonctionné pour moi.
Vous pouvez également utiliser un code de couleur pour rendre votre cellule UITableView lucrative.
[cell setBackgroundColor:[self colorWithHexString:@"1fbbff"]];
C'est le code pour appliquer la méthode du code de couleur:
-(UIColor*)colorWithHexString:(NSString*)hex
{
NSString *cString = [[hex stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
if ([cString length] < 6) return [UIColor grayColor];
if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];
if ([cString length] != 6) return [UIColor grayColor];
NSRange range;
range.location = 0;
range.length = 2;
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float) r / 255.0f)
green:((float) g / 255.0f)
blue:((float) b / 255.0f)
alpha:1.0f];
}