web-dev-qa-db-ja.com

iOS Swift viewForHeaderInSectionが呼び出されていません

HeaderViewUITableviewを追加しようとしているUITableviewがあります。

ただし、viewForHeaderInSectionは呼び出されていませんが、titleForHeaderInSectionが呼び出されているか表示されています。また、このためにカスタムセルヘッダーを使用しようとしましたが、機能しません。

何が間違っているのかわかりません。

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

viewForHeaderInSectionメソッドはUITableViewDelegateプロトコルに属します。したがって、このコールバックを取得するには、Table ViewのdelegateをView Controllerに設定する必要があります。他のメソッドが呼び出されるときに、おそらくテーブルビューのdataSourceを設定しただけでしょう。

19
croX

In Swift

電話する必要があります

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

in Swift 3.

tableView.estimatedSectionHeaderHeight = 40をviewDidに追加して、viewForHeaderInSectionを呼び出すこともできます。

6
Craig P

デフォルトではデリゲートであるUITableViewControllerでviewForHeaderInSectionが呼び出されないという問題がありました。それは明らかになった

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

viewForHeaderInSectionが呼び出されないようにしました。したがって、デリゲートが機能しない場合は、他のセクションヘッダーメソッドのいずれかをオーバーライドしていないことを確認する必要があります。

0