我通过子类化UITableViewHeaderFooterView创建了一个自定义的tableView标头,它在iOS 10和更高版本上可以正常工作,但在iOS 9上,宽度不能随tableView边界进行调整。我使用的步骤:-New File > CocoaTouchClass > CustomHeader:UITableViewCell
。我已将UITableViewCell
类手动更改为UITableViewHeaderFooterView
。
2)将其注册在viewDidLoad中。
tableView.register(UINib(nibName: "CustomHeader", bundle: nil),forHeaderFooterViewReuseIdentifier: CustomHeader.reuseIdentifier)
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let customHeader = tableView.dequeueReusableHeaderFooterView(withIdentifier: CustomHeader.reuseIdentifier) as! CustomHeader
return customHeader
}
CustomHeader
class CustomHeader: UITableViewHeaderFooterView {
class var reuseIdentifier: String{return String(describing: self)}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
self.contentView.backgroundColor = UIColor(red: 244/255, green: 244/255, blue: 245/255, alpha: 1)
}
ViewController
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let customHeader = tableView.dequeueReusableHeaderFooterView(withIdentifier: CustomHeader.reuseIdentifier) as! CustomHeader
return customHeader
}
答案 0 :(得分:0)
方法1 :使用代码中的UIView
创建页脚视图
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerRect = CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 40.0)
let footerView = UIView(frame: footerRect)
footerView.backgroundColor = UIColor.green
let label = UILabel(frame: CGRect(x: 0.0, y: 4.0, width: 200.0, height: 20.0))
label.text = "Hello"
footerView.addSubview(label)
return footerView
}
方法2 :使用IBOutlet连接的UIView
(.xib)对象创建页脚视图
a)通过选择文件>新建>文件来创建视图文件。在用户界面下选择查看。命名文件。例如,命名为FooterView.xib。
b)通过选择文件>新建>文件来创建UIView
子类文件。在“源”下选择“可可接触类”。选择UIView子类后,命名文件。例如,命名为FooterView.swift。
c)选择View
文件。然后在中间窗格中选择File's Owner
。然后将UIView
子类名称(FooterView)设置为该类。同时打开View
文件和UIView subclass
文件。将后者与前者的Content View
建立IBOutlet连接。
import UIKit
class FooterView: UIView {
@IBOutlet var contentView: UIView!
@IBOutlet weak var myLabel: UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit() {
Bundle.main.loadNibNamed("FooterView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
}
override func awakeFromNib() {
super.awakeFromNib()
myLabel.text = "My footer"
}
}
d)将UIView
对象添加到视图控制器。 (请参见下图。)设置类名称(FooterView)。
e)将页脚视图对象连接到视图控制器。
f)准备表视图的viewForFooterInSection
委托方法。
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
// MARK: - Variables
let list = ["George", "Nancy", "Jim"]
// MARK: - IBOutlet
@IBOutlet var footerView: FooterView!
@IBOutlet weak var tableView: UITableView!
// MARK: - IBAction
// MARK: - Life cycle
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - TableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return list.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = list[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerRect = CGRect(x: 0, y: 0, width: tableView.bounds.width, height: 40.0)
footerView.frame = footerRect
return footerView
}
}