一个iOS tableView 滚动标题联动效果的实现

本文讲述了如何在iOS应用中处理UITableView的滚动问题,当屏幕顶部被导航栏和栏目标题遮挡时,通过计算contentOffset、导航栏高度和栏目视图高度来确定显示在屏幕上的顶部cell或分区头部所在的分区,进而实现点击标题滚动到相应位置的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图

请添加图片描述

情景

tableview 是从屏幕顶部开始的,现在有导航栏,和栏目标题视图将tableView的顶部覆盖了

分析

我们为了达到滚动到某个分区选中标题的效果,就得知道
展示最顶部的cell或者区头在哪个分区范围内

所以我们必须首先获取顶部的位置

由于一个tableView 本身最顶部(屏幕顶部,被导航栏盖住的地方)的位置的origin.y = tableView.cotentoffset.y

所以,能够展示出来的顶端的位置就是

origin.y + 导航栏高度 + 栏目视图高度

我们可以通过 tableView 的 rectForSection 接口获取
每一个分区的rect范围
,通过遍历判断当前的顶端位置在
哪个分区内,就可以获取当前要选中某个标题

代码

 //tableView在屏幕顶端的位置的origin 
  CGFloat origin = self.tableView.contentOffset.y;
  //栏目视图高度
   origin += 52 * PLUS_SCALE;
   //导航栏高度
   origin += SafeAreaTopHeight; 
    NSIndexPath *indexPath;
    for (int i = 0; i < self.tableView.numberOfSections; i ++) {
        CGRect rect = [self.tableView rectForSection:i];
        if (CGRectGetMinY(rect) < origin && CGRectGetMaxY(rect) > origin) {
            indexPath = [NSIndexPath indexPathForRow:0 inSection:i];
            break;
        }
    }

 //然后选中某个标题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值