我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上
Posted
技术标签:
【中文标题】我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上【英文标题】:I want to position top UIView on top of UITableView using SnapKit 【发布时间】:2019-03-28 13:55:03 【问题描述】:我是用 snapkit 编写的 UI 渲染。我没有使用故事板或 nib 文件。
。
怎么写?
下面是我写的代码
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?会容易得多 【参考方案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 是对的。将其更改为已编辑的帖子仍然有效,并且在您添加部分时会给出正确的输出。以上是关于我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上的主要内容,如果未能解决你的问题,请参考以下文章
UITableView HeaderView,FooterView 使用SnapKit布局导致约束异常
使用 SnapKit 对 UIView 进行约束但啥也不显示