J'essaie de changer la couleur d'arrière-plan de UITableViewHeaderFooterView. Bien que la vue apparaisse, la couleur d'arrière-plan reste la couleur par défaut. Je reçois un journal de xcode disant:
La définition de la couleur d’arrière-plan sur UITableViewHeaderFooterView a été obsolète. Veuillez utiliser contentView.backgroundColor à la place.
Cependant, aucune des options suivantes ne fonctionne:
myTableViewHeaderFooterView.contentView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundView.backgroundColor = [UIColor blackColor];
myTableViewHeaderFooterView.backgroundColor = [UIColor blackColor];
J'ai également essayé de changer la couleur d'arrière-plan de la vue dans le fichier xib.
Aucune suggestion? Merci.
Vous devez utiliser myTableViewHeaderFooterView.tintColor ou attribuer une vue d'arrière-plan personnalisée à myTableViewHeaderFooterView.backgroundView.
La seule façon de définir une couleur (avec n'importe quel alpha) est d'utiliser backgroundView
:
Rapide
self.backgroundView = UIView(frame: self.bounds)
self.backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
Obj-C
self.backgroundView = ({
UIView * view = [[UIView alloc] initWithFrame:self.bounds];
view.backgroundColor = [UIColor colorWithWhite: 0.5 alpha:0.5];
view;
});
Réponses aux commentaires
Aucune de ces autres options ne fonctionne de manière fiable (malgré les commentaires ci-dessous)} _
// self.contentView.backgroundColor = [UIColor clearColor];
// self.backgroundColor = [UIColor clearColor];
// self.tintColor = [UIColor clearColor];
la backgroundView
est redimensionnée automatiquement. (Inutile d'ajouter des contraintes)
Alpha de contrôle avec UIColor(white: 0.5, alpha: 0.5)
ou backgroundView.alpha = 0.5
.
(bien sûr, n'importe quelle couleur conviendra)}
Lorsque vous utilisez XIB, définissez la vue racine sur UITableViewHeaderFooterView
et associez la backgroundView
par programme:
Inscrivez-vous avec:
tableView.register(UINib(nibName: "View", bundle: nil),
forHeaderFooterViewReuseIdentifier: "header")
Charger avec:
override func tableView(_ tableView: UITableView,
viewForHeaderInSection section: Int) -> UIView? {
if let header =
tableView.dequeueReusableHeaderFooterView(withIdentifier: "header") {
let backgroundView = UIView(frame: header.bounds)
backgroundView.backgroundColor = UIColor(white: 0.5, alpha: 0.5)
header.backgroundView = backgroundView
return header
}
return nil
}
► Trouvez cette solution sur GitHub et des détails supplémentaires sur Swift Recipes .
Dans iOS 7, contentView.backgroundColor
fonctionnait pour moi, tintColor
ne le faisait pas.
headerView.contentView.backgroundColor = [UIColor blackColor];
Bien que clearColor
ne fonctionne pas pour moi, la solution que j'ai trouvée consiste à définir la propriété backgroundView
sur image transparente. Peut-être que cela aidera quelqu'un:
UIGraphicsBeginImageContextWithOptions(CGSizeMake(1, 1), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
headerView.backgroundView = [[UIImageView alloc] initWithImage:blank];
Assurez-vous de définir la couleur d'arrière-plan de la contentView
pour votre UITableViewHeaderFooterView
:
self.contentView.backgroundColor = [UIColor whiteColor];
Alors ça va marcher.
Pour moi, j’ai essayé tout ce qui est dit ci-dessus, mais je recevais toujours l’avertissement "La définition de la couleur de fond sur UITableViewHeaderFooterView est obsolète. Veuillez utiliser contentView.backgroundColor à la place." puis j'ai essayé ceci: dans le fichier xib, la couleur d'arrière-plan de la vue en-tête était sélectionnée pour effacer la couleur au lieu de la valeur par défaut une fois que je l'avais modifiée par défaut, l'avertissement avait disparu.
Pour une couleur claire, j'utilise
self.contentView.backgroundColor = [UIColor clearColor];
self.backgroundView = [UIView new];
self.backgroundView.backgroundColor = [UIColor clearColor];
Cela me semble bien.
Dans le générateur d'interface, affichez votre .xib, dans l'élément supérieur, dans l'inspecteur d'attributs, définissez la couleur d'arrière-plan sur la valeur par défaut. Ensuite, accédez à la vue Contenu et définissez la couleur d'arrière-plan (référence à https://github.com/jiecao-fm/SwiftTheme/issues/24 ).
si vous avez créé une sous-classe personnalisée de UITableViewHeaderFooterView
avec le fichier xib
, vous devez remplacer setBackgroundColor
. Gardez le vide.
-(void)setBackgroundColor:(UIColor *)backgroundColor {
}
Et cela résoudra votre problème.
Sur iOS9 headerView.backgroundView.backgroundColor
a fonctionné pour moi:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
TableViewHeader *headerView = (TableViewHeader *)[super tableView:tableView viewForHeaderInSection:section];
headerView.backgroundView.backgroundColor = [UIColor redColor];
}
Sur iOS8 J'utilisais headerView.contentView.backgroundColor
sans problème, mais maintenant avec iOS 9, je rencontrais un problème étrange qui faisait que la couleur d'arrière-plan ne remplissait pas tout l'espace de la cellule. J'ai donc juste essayé headerView.backgroundColor
et j'ai eu la même erreur de l'OP.
La définition de la couleur d’arrière-plan sur UITableViewHeaderFooterView a été obsolète. Veuillez utiliser contentView.backgroundColor à la place.
Alors maintenant tout fonctionne bien et sans avertissement en utilisant headerView.backgroundView.backgroundColor
Si vous êtes personnalisation d'une cellule d'en-tête de section avec Storyboard/Nib }, assurez-vous que la couleur d'arrière-plan est default pour la vue "En-tête de section de tableau".
Et si vous sous-classe UITableViewHeaderFooterView
et utilisez nib, vous devez alors créer un IBOutlet
pour la vue de contenu et le nommer, par exemple. containerView
. Ceci ne doit pas être confondu avec contentView
, qui est le parent de cette vue conteneur.
Avec cette configuration, vous modifiez plutôt la couleur d'arrière-plan de containerView
.
Pour les couleurs d’arrière-plan uni, définir le contentView.backgroundColor
devrait suffire:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.contentView.backgroundColor = .red // Works!
}
}
Pour les couleurs avec transparence, y compris la couleur .clear
, cela ne fonctionne plus:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.contentView.backgroundColor = .clear // Does not work ????
}
}
Pour un en-tête de section totalement transparent, définissez la propriété backgroundView
sur une vue vide:
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let headerView = view as? UITableViewHeaderFooterView {
headerView.backgroundView = UIView() // Works!
}
}
Cependant, méfiez-vous des effets secondaires possibles. À moins que la vue du tableau ne soit définie sur "Groupé", les en-têtes de section s'emboîtent en haut lors du défilement. Si les en-têtes de section sont transparents, le contenu de la cellule sera visible, ce qui pourrait ne pas être très beau.
Ici, les en-têtes de section ont un fond transparent:
Pour éviter cela, il est préférable de définir l'arrière-plan de l'en-tête de section sur une couleur unie (ou un dégradé) correspondant à l'arrière-plan de votre vue tableau ou de votre contrôleur de vue.
Ici, les en-têtes de section ont un fond dégradé totalement opaque:
J'ai essayé avec la chaîne AspectWhenContainedIn et cela a fonctionné pour moi.
[[UIView appearanceWhenContainedIn:[UITableViewHeaderFooterView class], [UITableView class], nil]
setBackgroundColor: [UIColor.grayColor]];
Rapide:
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView {
var headerView: TableViewHeader = super.tableView(tableView, viewForHeaderInSection: section) as! TableViewHeader
headerView.backgroundView.backgroundColor = UIColor.redColor()
}
Je me sens obligé de partager mon expérience. J'avais ce morceau de code qui fonctionnait bien avec iOS 10 et iOS 11 headerView?.contentView.backgroundColor = .lightGray
Puis tout à coup, j'ai décidé de déployer l'application pour iOS 9, car il existe certains appareils (iPad mini, une génération plus ancienne ne met à jour aucun système d'exploitation au-delà de 9) - La seule solution qui fonctionnait pour tous les iOS 9, 10 et 11 était de définir une vue de base pour l'en-tête qui contenait ensuite toutes les autres sous-vues de l'en-tête, de la relier à partir du storyboard et de définir la variable backgroundColor
de cette vue de base.
Lors du câblage de la prise, gardez à l'esprit de ne pas l'appeler: backgroundView
car il existe déjà une propriété portant ce nom dans une superclass
. J'ai appelé le mien containingView
De même, lors du câblage du contrôle de la prise, cliquez sur la vue dans Document Outline
pour vous assurer qu'elle n'est pas câblée jusqu'à file owner
.
Créez UIView et définissez la couleur d'arrière-plan, puis définissez-le sur self.backgroundView.
- (void)setupBackgroundColor:(UIColor *) color {
UIView *bgView = [[UIView alloc] initWithFrame:self.bounds];
bgView.backgroundColor = color;
self.backgroundView = bgView;
}
La définition de BackgroundView avec une couleur claire fonctionne correctement pour les en-têtes visibles . Si le tableau défile pour afficher les en-têtes en bas, cette solution échoue.
La table P.S.My consiste uniquement en en-têtes sans aucune cellule.
peut-être parce que le backgroundView n'existe pas
override func draw(_ rect: CGRect){
// Drawing code
let view = UIView()
view.frame = rect
self.backgroundView = view
self.backgroundView?.backgroundColor = UIColor.yourColorHere
}
ça marche pour moi.