首页 > 解决方案 > 我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上

问题描述

我是用 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 孩子!!

对不起我的英语不好..

谢谢阅读

标签: swiftuitableviewsnapkit

解决方案


你想要子视图,它是 tableview 的粘性标题。将此行更改self.tableView.addSubview(self.subView)tableView.tableHeaderView = subView.


推荐阅读