iOS 9上的UITableViewHeaderFooterView宽度问题

时间:2019-03-07 12:56:42

标签: ios swift uitableview uitableviewsectionheader

我通过子类化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
}

iOS 9上的结果 enter image description here

iOS 10及更高版本上的结果 enter image description here

1 个答案:

答案 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)。

enter image description here

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
    }
}

enter image description here enter image description here