当标题位于视图顶部时取消组合UITableView节标题

时间:2016-10-01 03:29:47

标签: ios iphone swift uitableview uiscrollview

我目前正在开发一个UITableViewController。我当前的实现包括标题视图(白色视图),UITableView节标题(红色视图)和tableview(灰色)。目前,TableView样式已分组,因此当向上滚动缩小标题视图时,Section Header会与TableView一起滚动。

当标题视图偏离屏幕时,我试图将Section Header保留在视图的顶部,并允许UITableViewCells在Section Header下滚动。目前,一旦Section Header到达视图顶部,tableview就无法向上滚动。任何建议都会非常有用

enter image description here

enter image description here

当前代码:

    override func tableView(_ tableView: UITableView, heightForHeaderInSection     section: Int) -> CGFloat {
    return 106.0
}

override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let view1 = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.width, height: 106.0))
    view1.backgroundColor = UIColor.red
    return view1
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return  80.0
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let maxOffset = (scrollView.contentSize.height - scrollView.frame.size.height)
    if scrollView.contentOffset.y >=  maxOffset {
        scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: maxOffset)
    }

    if scrollView.contentOffset.y >= 35.0 {
        scrollView.contentOffset = CGPoint(x: scrollView.contentOffset.x, y: 35.0)
    }
}
}

2 个答案:

答案 0 :(得分:2)

我可以在不使用scrollViewDidScroll方法的情况下复制您想要的行为,但headerView将不再使用tableView滚动。当内容偏移量小于零时,您可以使用scrollViewDidScroll方法更改headerView的高度/原点。

class TableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var headerView: UIView?
    @IBOutlet weak var tableView: UITableView? {
        didSet {
            tableView?.dataSource = self
            tableView?.delegate = self
        }
    }

    func numberOfSections(in tableView: UITableView) -> Int { return 1 }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 10 }
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell")

        cell.backgroundColor = UIColor.gray;

        return cell
    }

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

        let header = UIView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 50))

        header.backgroundColor = UIColor.red

        return header
    }

    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 100 }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return 60 }
}

storyboard

答案 1 :(得分:2)

我不完全确定我会遵循您要完成的任务,但请允许我尝试推断并随意提供说明。我喜欢表格视图练习:)

据我所知:

1)您希望红色视图下方的白色视图,红色视图和表格单元格从默认位置向上滚动

2)您希望白色视图滚出可见性

3)您希望红色视图在顶部浮动,而单元格在其下方滚动

4)您当前将白色视图作为表格标题,红色视图作为节标题,灰色区域是表格单元格

听起来很酷!

为什么不使用2个表格部分:

1)删除表头

2)在表格视图的单元格0部分0中设置白色视图。

3)设置表委托方法,因此第0节将有一个0高度

的nil标题

3.5)同时设置表委托方法,因此第1节将是您的主表

4)使用UITableViewStylePlain,因此第1节标题将浮动在顶部

这是所需的功能吗?