UITableVC 未显示部分 header 内容

UITableVC No section header content shown

仅将我的代码转换为 swift,因此不使用故事板。重写代码后(没有故事板使用) header 信息未显示!

如果我将 viewForHeaderInSection return 值更改为:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
    cell.fillHeader(header: listTitles[section])

    return cell.contentView
}

至:

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
    cell.fillHeader(header: listTitles[section])

    return cell  // ==> removed .contectView
}

显示了 header 内容,但 header 部分向左移动,执行我用来启动行删除的滑动手势。有什么建议么?在下面找到相关代码。

class ListsVC: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(ListsVCHeader.self, forCellReuseIdentifier: "headerId")
        // register other Cells
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return listTitles.count
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int)
    -> String? {
        return listTitles[section]
    }

    override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

        let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader
        cell.fillHeader(header: listTitles[section])
        return cell.contentView
    }

    override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return HeaderSectionHeight
    }

    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

        switch editingStyle {
        case .delete:
            // mycode
        default:
            break
        }
    }
}

第Header单元格

class ListsVCHeader: UITableViewCell {

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {

    super.init(style: style, reuseIdentifier: reuseIdentifier)
        // add subviews and constraints
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func fillHeader (header: String) {
        name.text = header
    }
}

viewDidLoad 中的 register 更改为:

tableView.register(ListsVCHeader.self, forHeaderFooterViewReuseIdentifier: "headerId") 

您的 class ListsVCHeader 应更改为:

class ListsVCHeader: UITableViewHeaderFooterView

最后更改以下代码:

let cell = tableView.dequeueReusableCell(withIdentifier: "headerId") as! ListsVCHeader

let cell = tableView.dequeueReusableHeaderFooterView(withIdentifier: "headerId) as! ListsVCHeader