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
仅将我的代码转换为 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