效果图
情景
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;
}
}
//然后选中某个标题