J'ai une vue UITable J'essaie d'ajouter un HeaderView
sur mon UITableview
.
Cependant, le viewForHeaderInSection n'est pas appelé, mais je vois que le titleForHeaderInSection est appelé ou est affiché. J'ai également essayé d'utiliser un en-tête de cellule personnalisé pour cela et cela ne fonctionne pas non plus.
Je n'ai aucune idée de ce que je fais mal.
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Groceries"
tableView.registerNib(UINib(nibName: "TransactionSpecifiedCategoriesTableViewCell", bundle: nil), forCellReuseIdentifier: "TransactionSpecifiedCategoriesTableViewCell")
tableView.registerNib(UINib(nibName: "TransactionSpecifiedCategoriesHeaderViewCell", bundle: nil), forHeaderFooterViewReuseIdentifier: "TransactionSpecifiedCategoriesHeaderViewCell")
tableView.tableFooterView = UIView(frame: CGRectMake(0, 0, 0, 0))
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let footerView = UIView(frame: CGRectMake(0, 0, tableView.frame.size.width, 100))
footerView.backgroundColor = UIColor.blackColor()
return footerView
//let header: UITableViewHeaderFooterView = view as UITableViewHeaderFooterView
//var headerView = UIView(frame: CGRectMake(0, 0, 100, 320))
//headerView.backgroundColor = UIColor.blackColor()
//
//return headerView
}
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 200.0
}
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "First section header title"
}
La méthode viewForHeaderInSection
appartient au protocole UITableViewDelegate
. Vous devez donc définir le delegate
de votre vue de table sur votre contrôleur de vue afin d'obtenir ce rappel. Vous venez probablement de définir dataSource
de la vue de table lorsque vos autres méthodes sont appelées.
Dans Swift
Vous devez appeler
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let rect = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 44)
let footerView = UIView(frame:rect)
footerView.backgroundColor = UIColor.clear
return footerView
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44
}
dans Swift 3.
vous pouvez également ajouter tableView.estimatedSectionHeaderHeight = 40 dans le viewDid pour obtenir viewForHeaderInSection appelé
J'ai eu ce problème avec viewForHeaderInSection n'étant pas appelé dans UITableViewController, qui est le délégué par défaut. Il s'est avéré que
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
empêchait viewForHeaderInSection d'être appelé. Ainsi, si le délégué ne fonctionne pas, vous devrez peut-être vérifier que vous ne remplacez pas l'une des autres méthodes d'en-tête de section.