iOS里面tableView的section顶端粘滞效果是怎么实现的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS里面tableView的section顶端粘滞效果是怎么实现的相关的知识,希望对你有一定的参考价值。

参考技术A 有两种方法:
1、tableview.tableHeaderView
2、- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
第一种方法,header的会跟着tableview滚动隐藏,而第二种方法则有你说的那种粘滞效果。
footer一样。本回答被提问者和网友采纳

滚动时如何使tableView单元格“粘”

【中文标题】滚动时如何使tableView单元格“粘”【英文标题】:How to make tableView cell "stick" while scrolling 【发布时间】:2018-08-03 21:44:42 【问题描述】:

我的 tableView 顶部的单元格上有一个 SegmentedControl(tableView 由所有静态单元格组成)...我希望顶部单元格(和 segmentedControl)“粘贴”,以便它始终作为用户可见滚动表格(见下面的截图)。这可能吗?

【问题讨论】:

您想将分段控件添加为表格视图的子视图。然后添加与段控件高度相同的表格视图标题或空单元格。 非常简单,只需将 segmentedControl 拖放到表格的标题视图中即可。 @aBilal17 它不会被“粘住”。 正确的方法是不使用 TableViewController,而是使用 UIViewController 和 tableView。然后将分段控件添加为常规视图,这样就不会受到滚动的影响。 【参考方案1】:

通常,要应用此行为,您应该将其添加为 标题视图 而不是单元格。表格视图中的标题视图确实“坚持”。但是由于您正在添加静态单元格(UITableViewController),因此即使您尝试将标题视图添加到表格视图,它也不会应用粘贴行为。

作为一种解决方法,您可能需要添加一个新的 UIViewController,其中包含顶部视图(标题视图)和容器视图,如下所示:

【讨论】:

谢谢它有点乱,因为 tableView 的视图依赖于 SegmentedControl 的值,即我必须做某种类型的协议/委托才能将消息从外部传递给 tableView风险投资。我会暂时开放一段时间,以确保在我标记为已接受之前没有其他方法。 ? @GarySabo 当然!希望有人提供更好的解决方案。【参考方案2】:

我想到的一个骇人听闻的解决方案是:

在您的 VC 中声明标题,或保留引用:

private var header: UIView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 40))

将其添加为tableView的子视图,并将内容插入设置为标题的高度。

tableView.addSubview(header)
tableView.contentInset.top = header.frame.height

如果您的标题使用自动布局,您需要调用 view.layoutIfNeeded()设置内容前插入

然后让 header 始终粘在 tableView 的顶部:

func scrollViewDidScroll(_ scrollView: UIScrollView) 
    header.frame.origin.y = scrollView.contentOffset.y

【讨论】:

以上是关于iOS里面tableView的section顶端粘滞效果是怎么实现的的主要内容,如果未能解决你的问题,请参考以下文章

iOS tableView Section圆角方案

iOS tableView中section的headerView的位置

UITableView 检测section header的停靠和脱离

iOS项目开发实战——学会使用TableView列表控件plist读取与Section显示

iOS 怎么让tableView 的section不刷新 只刷新cell部分

iOS -tableView在Grouped样式下去掉section分割线