UITableView 检测section header的停靠和脱离

Posted

技术标签:

【中文标题】UITableView 检测section header的停靠和脱离【英文标题】:UITableView detect docking and undocking of section header 【发布时间】:2018-01-21 09:58:48 【问题描述】:

我有一个 tableView 和一个 viewForHeaderInSection 设置为自定义视图。我想要完成的是在标题部分变得粘滞时将此视图更改为不同的视图。

是否有一个回调可以用来检测 tableView 的部分标题何时粘在顶部?

任何关于这方面的建议都会有很大帮助,谢谢!

编辑: 在此处添加一个模拟以更好地解释我在这里要完成的工作。

我的tableView.tableHeaderView 设置为“横幅 GIF 动画”(图像中的黑色区域) tableView 的部分标题设置为 UISegmentedControl,其中包含“Tab 1”和“Tab 2” 这里的“Image 1”和“Image 2”是 tableView 的部分单元格。

到目前为止,当您滚动时,黑色部分(tableview 的标题)会随着屏幕滚动并在您滚动时消失。

表格视图的部分标题(即Tab1/Tab2)在您滚动经过它时会粘在屏幕顶部。

我希望此部分在部分标题粘贴时从 Tab1/Tab2 更改为 countdown timer(类似于标题的 '10D|4H|3M|03S' 视图),并在它取消停靠时将其更改回选项卡视图。

【问题讨论】:

你让它工作了吗?我想实现类似的功能。 是的,我最终使用了 tableView 的滚动代理 scrollViewDidScroll(_ scrollView: UIScrollView) 并检查 tableView.contentOffset.y 是否大于 tableView 的标题高度。如果是, 谢谢..我也搞定了..:) @PGDev 你能给我提供一个实现吗?我需要实现类似的功能。谢谢。 【参考方案1】:

您可以在 scrollViewDidScroll 中更好地实现这一点,通过简单计算当前 tableView 偏移量和单元格高度,您可以找到特定标题是否位于顶部并将其视图更改为另一个

【讨论】:

我已经设置了scrollViewDidScroll,并且我能够确定我想要在哪个tableView.contentOffset.y 值上进行切换,但是如何从这里访问tableView 的部分标题? 制作一个全局整数,比如 headerViewSection ,当您发现需要更改背景颜色的单元格的部分索引时,重新加载表格并在 viewForHeader 中为该部分的标题视图设置所需的颜色

以上是关于UITableView 检测section header的停靠和脱离的主要内容,如果未能解决你的问题,请参考以下文章

UITableView section header 不固定

UITableView 中的 indexPath 和 indexPath.section

带有 Section、IndexList 和 Search 的 UITableView

在 UITableView 中为 Section Header 添加填充

iOS8中 UITableView section 分区头部视图不显示

如何在 UITableView 中为每个 Section 启用水平分页