我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上

I want to position top UIView on top of UITableView using SnapKit

我是用 snapkit 编写的 UI 渲染。我没有使用故事板或 nib 文件。

我想使用 SnapKit 将顶部 UIView 置于 UITableView 之上。

怎么写?

下面是我写的代码

swift
import UIKit
import SnapKit

class ViewController: UIViewController {


    var data: [String] = []
    var tableView = UITableView()
    var subView = UIView()
    var label = UILabel()


    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.delegate = self
        self.tableView.dataSource = self
        // Do any additional setup after loading the view, typically from a nib.
        label.text = "Hello?"
        self.view.addSubview(self.tableView)
        self.tableView.addSubview(self.subView)
        self.subView.addSubview(self.label)
        self.subView.backgroundColor = .gray

        self.tableView.snp.makeConstraints { make in
            make.edges.equalToSuperview()

        }
        self.subView.snp.makeConstraints { make in
            make.top.width.equalTo(self.tableView)
            make.centerX.equalTo(self.tableView)
            make.height.equalTo(200)
        }
        self.label.snp.makeConstraints { make in
            make.centerX.centerY.equalTo(self.subView)
        }
        for i in 0...100 {
            data.append("\(i)")
        }
        self.tableView.reloadData()


    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let element = self.data[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "comicListCell") ?? UITableViewCell(style: .normal, reuseIdentifier: "comicListCell")
        cell.textLabel?.text = element
        return cell
    }

}

extension ViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(self.data[indexPath.row])
    }
}

我的代码:

我想要!:

UIView必须放入UITableView子项!!

抱歉我的英语不好..

感谢阅读

您需要粘性 header 表格视图的子视图。将此行 self.tableView.addSubview(self.subView) 更改为 tableView.tableHeaderView = subView

您可以轻松添加 tableView 方法:

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

    if section == 0 {
        return self.subView
    } else {
        return UIView.init(frame: CGRect.zero)
    }
}