2017-02-16 2 views
1

J'ai un thème global appliqué qui change la couleur de fond d'un UITableViewHeaderFooterView. Voici le code:iOS: Remplacer UIAppearance appearanceWhenContainedInInstancesOfClasses

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]] setBackgroundColor:[UIColor lightGray]]; 

Il y a une instance sur un écran, où je souhaite remplacer cette couleur et changer la couleur au blanc. J'ai essayé le code suivant:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { 

    let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: "HeaderView") as? HeaderView 

    headerView.contentView.backgroundColor = UIColor.white 
    headerView.backgroundColor = UIColor.white 

    return headerView 
} 

Toutefois, headerView apparaît toujours avec un arrière-plan gris clair. Des idées sur la façon de le contourner?

+0

Avez-vous essayé de ne pas dequeueing le HeaderFooterView et simplement créer une nouvelle vue? – ystack

Répondre

3

Vous pouvez créer une sous-classe de UITableViewHeaderFooterView - dites WhiteUITableViewHeaderFooterView et configurez-la pour l'en-tête correct.

Ensuite, vous pouvez définir l'apparence des vues dans cette classe [[UIView appearanceWhenContainedInInstancesOfClasses:@[[WhiteUITableViewHeaderFooterView class]]] setBackgroundColor:[UIColor white]];

0

Qu'en est-il de changer la couleur d'arrière-plan dans la classe HeaderView elle-même dans une méthode comme LayoutSubviews()? Vous pouvez faire un property de cette classe représentant si c'est la bonne vue pour changer sa couleur de fond. Je ne sais pas si c'est le meilleur moyen d'y parvenir, mais devrait être une solution de contournement.