web-dev-qa-db-fra.com

iOS Swift viewForHeaderInSection n'est pas appelé

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"
}

enter image description here

18
user3110353

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.

19
croX

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
    }
24
karthikeyan

dans Swift 3.

vous pouvez également ajouter tableView.estimatedSectionHeaderHeight = 40 dans le viewDid pour obtenir viewForHeaderInSection appelé

6
Craig P

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.

0
Damien Del Russo