Reputation: 522
I have a UITableview I am trying to add a HeaderView
onto my UITableview
.
However the viewForHeaderInSection is not being called, but I see the titleForHeaderInSection is being called or is shown. I also tried using a custom cell header for this and it also does not work.
I have no idea what I am doing wrong.
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"
}
Upvotes: 22
Views: 31910
Reputation: 507
in Swift 3.0
you can also add tableView.estimatedSectionHeaderHeight = 40 into the viewDidLoad to get viewForHeaderInSection called
Upvotes: 8
Reputation: 3888
In swift 3
You should call
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
}
Upvotes: 29
Reputation: 1048
I had this issue with viewForHeaderInSection not being called in the UITableViewController, which is the delegate by default. It turned out that
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
was preventing viewForHeaderInSection from being called. Thus, if the delegate thing doesn't work, you may need to check that you aren't overriding one of the other section header methods.
Upvotes: 1
Reputation: 1725
The viewForHeaderInSection
method belongs to the UITableViewDelegate
Protocol. You therefore must set the delegate
of your table view to your view controller in order to get this callback. You probably did just set the tableview's dataSource
as your other methods are called.
Upvotes: 27