2017-08-02 2 views
0

J'ai une application construite avec Swift3, avec une tableview. J'utilise storyboard, et tableview est placé à l'intérieur du contrôleur de vue. J'utilise des sections et l'en-tête de section de réglage par l'intermédiaire du code. Je souhaite que l'en-tête de section affiche le même arrière-plan gris que celui que j'ai défini pour la vue de la table. J'ai essayé de définir le même code couleur, mais cela n'a pas aidé. J'ai donc essayé de paramétrer comme UIColor.clear, mais il apparaît en fond blanc pour l'en-tête de la section. J'en ai besoin pour utiliser l'arrière-plan de la table. Pouvez-vous me guider sur ce qui ne va pas.UIColor.Clear ne donne pas le résultat attendu lors de l'utilisation de l'en-tête de section dans swift3

code:

func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) { 
     print("willDisplayFooterView.. for section \(section) ") 
     (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    } 

    func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
     print("willDisplayHeaderView,... for section \(section) ") 
     (view as! UITableViewHeaderFooterView).backgroundView?.backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    } 

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 

     print("titleForHeaderInSection") 
     return self.section [section ] 
    } 

J'ai essayé d'utiliser viewForHeaderInSection, mais qu'il ne soit pas appelé du tout.

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

     print("in viewForHeaderInSection") 
     let view = UIView() 
     let label = UILabel() 

     label.text = self.section [section ]    
     view.addSubview(label) 
     view.backgroundColor = UIColor.clear 

     label.translatesAutoresizingMaskIntoConstraints = false 

     let horizontallayoutContraints = NSLayoutConstraint(item: label, attribute: .centerX, relatedBy: .equal, toItem: view, attribute: .centerX, multiplier: 1, constant: 0) 
     view.addConstraint(horizontallayoutContraints) 

     let verticalLayoutContraint = NSLayoutConstraint(item: label, attribute: .centerY, relatedBy: .equal, toItem: view, attribute: .centerY, multiplier: 1, constant: 0) 
     view.addConstraint(verticalLayoutContraint) 

     return view 
    } 

Répondre

1

Définissez la couleur de fond de la vue .. au lieu du view.backgroundView

func tableView(_ tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) { 
     print("willDisplayFooterView.. for section \(section) ") 
     (view as! UITableViewHeaderFooterView).backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    } 

func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { 
     print("willDisplayHeaderView,... for section \(section) ") 
     (view as! UITableViewHeaderFooterView).backgroundColor = UIColor.clear //UIColor(red: 232.0, green: 232.0, blue: 232, alpha: 1.0) 
    } 

DISCLAIMER: Je ne suis pas très bon à la syntaxe rapide .. mais espérons que cette réponse à votre question.

+0

salut .. encore ne me donne pas le comportement attendu. J'ai essayé de l'utiliser comme vous l'avez suggéré et j'ai reçu un avertissement indiquant qu'il s'agit d'un comportement obsolète et d'utiliser à la place la couleur d'arrière-plan contentView. J'ai donc essayé d'utiliser ça, mais toujours pas de chance. func tableView (_ tableView: UITableView, willDisplayFooterView view: UIView, section forSection: Int) { print ("willDisplayFooterView .. pour la section \ (section)") (voir aussi! UITableViewHeaderFooterView) .contentView.backgroundColor = UIColor.clear } – csharpnewbie

+0

redéfinissez-vous cette méthode? "func tableView (tableView: UITableView, section viewForHeaderInSection: Int) -> UIView?" –

+0

salut .. comme je l'avais édité dans la question originale, j'ai essayé d'utiliser viewForHeaderInSection, mais il n'est pas appelé du tout. – csharpnewbie

1

Vous pouvez changer la couleur de fond de contentView au lieu de backgroundView

(view as! UITableViewHeaderFooterView).contentView?.backgroundColor = UIColor. groupTableViewBackground 
+0

oui, j'ai essayé aussi, selon la suggestion de Marcio, mais cela n'a pas fonctionné. – csharpnewbie

+0

Marcio a suggéré de modifier backgroundColor de vue pas contentView. Avez-vous essayé de changer backgroundColor du contenu de la vue? – cyberme

+0

Oui, j'ai essayé d'utiliser comme il l'a suggéré et j'ai reçu un avertissement indiquant qu'il s'agit d'un comportement obsolète et d'utiliser la couleur d'arrière-plan contentView à la place. J'ai donc essayé d'utiliser ça, mais toujours pas de chance. func tableView (_ tableView: UITableView, willDisplayFooterView view: UIView, section forSection: Int) {print ("willDisplayFooterView .. pour la section (section)") (voir en tant que! UITableViewHeaderFooterView) .contentView.backgroundColor = UIColor.clear} – csharpnewbie