如何在一起滚动的 UITableView 顶部添加一个视图,但在滚动后坚持到顶部

iam*_*old 5 uitableview uiscrollview ios swift

我有一个高度为 100 像素的 UIView,它位于我的 UITableView 之上。当我向上滚动时,我希望 UIView 与我的 UITableView 一起滚动,就好像它是它的一部分一样。当我的 UIView 的 50 像素被向上滚动隐藏时,我想在继续向上滚动时将 UIView 固定在顶部。如何做到这一点?我尝试使用更改我的 UIView 的顶部 NSLayoutConstraint 常量等于我的 tableview 的内容偏移量,但它们不会以相同的速度滚动。

jok*_*man 5

首先确保您的 tableView 是grouped

self.tableView = UITableView(frame: CGRect(x: 0, y: (self.navigationController?.navigationBar.frame.maxY)!, width: self.view.bounds.size.width, height: (self.view.bounds.size.height - (self.navigationController?.navigationBar.frame.maxY)!)), style: .grouped)
self.tableView.delegate = self
self.tableView.dataSource = self
self.view.addSubview(self.tableView)  
Run Code Online (Sandbox Code Playgroud)

然后你需要将添加UIViewsubview你的tableView

self.myView = UIView()
self.myView.backgroundColor = UIColor.green
self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
self.tableView.addSubview(self.myView)
Run Code Online (Sandbox Code Playgroud)

为 tableView 的第一部分添加高度为 100 的标题,以便单元格位于正确的位置:

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 100
}
Run Code Online (Sandbox Code Playgroud)

然后调整滚动时的框架UIView

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let offset = scrollView.contentOffset.y
    if(offset > 50){
        self.myView.frame = CGRect(x: 0, y: offset - 50, width: self.view.bounds.size.width, height: 100)
    }else{
        self.myView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: 100)
    }
}
Run Code Online (Sandbox Code Playgroud)

演示:

在此输入图像描述


小智 0

你需要的是实现viewForHeader inSection你的 tableView 的方法(记住让你的 ViewController 实现 tableviewDelegate 协议),一旦你得到它,你应该将 tableViewStyle 设置为UITableViewStylePlain

如果您有兴趣获得更多帮助,请分享您的代码。

来源:具有固定节标题的 UITableView