iOS Swift 未调用 viewForHeaderInSection
iOS Swift viewForHeaderInSection Not being Called
我有一个 UITableview 我正在尝试将 HeaderView
添加到我的 UITableview
中。
但是没有调用 viewForHeaderInSection,但我看到正在调用或显示 titleForHeaderInSection。我还尝试为此使用自定义单元格 header,但它也不起作用。
我不知道我做错了什么。
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"
}
viewForHeaderInSection
方法属于 UITableViewDelegate
协议。因此,您必须将 table 视图的 delegate
设置为视图控制器才能获得此回调。您可能只是在调用其他方法时设置了 table 视图的 dataSource
。
我遇到了 viewForHeaderInSection 没有在 UITableViewController 中调用的问题,默认情况下它是委托。原来
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
正在阻止调用 viewForHeaderInSection。因此,如果委托不起作用,您可能需要检查您是否没有覆盖其他部分 header 方法之一。
在swift 3
你应该打电话给
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
}
在Swift3.0
你也可以在viewDidLoad中添加tableView.estimatedSectionHeaderHeight = 40得到viewForHeaderInSection叫
我有一个 UITableview 我正在尝试将 HeaderView
添加到我的 UITableview
中。
但是没有调用 viewForHeaderInSection,但我看到正在调用或显示 titleForHeaderInSection。我还尝试为此使用自定义单元格 header,但它也不起作用。
我不知道我做错了什么。
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"
}
viewForHeaderInSection
方法属于 UITableViewDelegate
协议。因此,您必须将 table 视图的 delegate
设置为视图控制器才能获得此回调。您可能只是在调用其他方法时设置了 table 视图的 dataSource
。
我遇到了 viewForHeaderInSection 没有在 UITableViewController 中调用的问题,默认情况下它是委托。原来
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat
正在阻止调用 viewForHeaderInSection。因此,如果委托不起作用,您可能需要检查您是否没有覆盖其他部分 header 方法之一。
在swift 3
你应该打电话给
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
}
在Swift3.0
你也可以在viewDidLoad中添加tableView.estimatedSectionHeaderHeight = 40得到viewForHeaderInSection叫