我目前正在开发一个UITableViewController。我当前的实现包括标题视图(白色视图),UITableView节标题(红色视图)和tableview(灰色)。目前,TableView样式已分组,因此当向上滚动缩小标题视图时,Section Header会与TableView一起滚动。
当标题视图偏离屏幕时,我试图将Section Header保留在视图的顶部,并允许UITableViewCells在Section Header下滚动。目前,一旦Section Header到达视图顶部,tableview就无法向上滚动。任何建议都会非常有用
当前代码:
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)
}
}
}
答案 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 }
}
答案 1 :(得分:2)
我不完全确定我会遵循您要完成的任务,但请允许我尝试推断并随意提供说明。我喜欢表格视图练习:)
据我所知:
1)您希望红色视图下方的白色视图,红色视图和表格单元格从默认位置向上滚动
2)您希望白色视图滚出可见性
3)您希望红色视图在顶部浮动,而单元格在其下方滚动
4)您当前将白色视图作为表格标题,红色视图作为节标题,灰色区域是表格单元格
听起来很酷!
为什么不使用2个表格部分:
1)删除表头
2)在表格视图的单元格0部分0中设置白色视图。
3)设置表委托方法,因此第0节将有一个0高度
的nil标题3.5)同时设置表委托方法,因此第1节将是您的主表
4)使用UITableViewStylePlain,因此第1节标题将浮动在顶部
这是所需的功能吗?