【问题标题】:I want to position top UIView on top of UITableView using SnapKit我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上
【发布时间】:2019-03-28 13:55:03
【问题描述】:

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

对不起,我的英语不好..

感谢阅读

【问题讨论】:

  • 为什么不将视图设置为 TableHeaderView?会容易得多

标签: swift uitableview snapkit


【解决方案1】:

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

【讨论】:

  • 感谢您的回答!我将原始代码更改为 tableView.tableHeaderView = subView。然后,第一个滚动页面崩溃了。我想要一点滚动。你能告诉我为什么吗?
  • 什么是崩溃日志?
  • viewForHeaderInSection 委托不是一个合适的解决方案。
【解决方案2】:

您可以轻松添加 tableView 方法:

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

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

【讨论】:

  • 感谢您的回答!它正在我的项目中工作:)
  • 很高兴能帮上忙!
  • 如果 tableview 有多个部分。每个部分都有这个子视图。
  • 嗯..我该怎么办..?
  • @YUKIYUKI 我相信 Emre-Özdil 是对的。将其更改为已编辑的帖子仍然有效,并且在您添加部分时会给出正确的输出。
猜你喜欢
  • 2011-11-24
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-08
相关资源
最近更新 更多