UITableView的tableHeaderView的颜色更改。 (不是节标题!)

问题描述 投票:0回答:1

我需要UITableView标头。节标题对我不起作用,因为它不应与单元格一起滚动。

所以我这样添加了tableView.tableHeaderView

 // ViewController

 tableView.tableFooterView = UIView()
 let header = SearchPopularHeaderView()
 header.height(36)
 tableView.tableHeaderView = header

 // ...
 // SearchPopularHeaderView

class SearchPopularHeaderView: UIView {

    private var lblTitle: UILabel!

    override init(frame: CGRect) {
        super.init(frame: frame)

        viewDidLoad()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)

        viewDidLoad()
    }

    private func viewDidLoad() {
        lblTitle = UILabel()
        lblTitle.text = "Most popular".localized()
        lblTitle.font = UIFont.systemFont(ofSize: 12, weight: .bold)
        lblTitle.textColor = UIColor("#e6f2f9")
        self.addSubview(lblTitle)

        lblTitle.centerY(to: self)
        lblTitle.leadingToSuperview(offset: 16)

        self.backgroundColor = UIColor("#3c4958")

        layoutIfNeeded()
    }
}

我尝试过,但不起作用:

[为标签添加新的容器视图,将其边缘调整为超级视图,并为此容器视图更改颜色。看起来UIView继承了UITableView的颜色。

问题:也许有人遇到了一些问题并且知道如何解决?


P.S。请有关tableHeaderView的答案,我知道关于选项的选择,使其像节标题或单元格一样。谢谢。

ios swift uitableview uiview
1个回答
0
投票

使用此扩展名设置headerView

extension UITableView {

    /// Set table header view & add Auto layout.
    func setTableHeaderView(headerView: UIView) {
        headerView.translatesAutoresizingMaskIntoConstraints = false

        // Set first.
        self.tableHeaderView = headerView

        // Then setup AutoLayout.
        headerView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        headerView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
        headerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    }

    /// Update header view's frame.
    func updateHeaderViewFrame() {
        guard let headerView = self.tableHeaderView else { return }

        // Update the size of the header based on its internal content.
        headerView.layoutIfNeeded()

        // ***Trigger table view to know that header should be updated.
        let header = self.tableHeaderView
        self.tableHeaderView = header
    }
}

然后在您的控制器中

override func viewDidLoad() {
        super.viewDidLoad()


        // 1. Setup AutoLayout
        self.tableView.setTableHeaderView(headerView: self.tableView.tableHeaderView!)

        // 2. First layout update
        self.tableView.updateHeaderViewFrame()
    }

    override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)

        // 3. Update layout every time device frame is changed.
        DispatchQueue.main.async {
            self.tableView.updateHeaderViewFrame()
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.