当前位置 博文首页 > cungudafa的博客:iOS UIcollection监听滚动最顶部的section

    cungudafa的博客:iOS UIcollection监听滚动最顶部的section

    作者:[db:作者] 时间:2021-09-08 10:27

    前言

    移动端除了点击事件的监听响应,更复杂一点的可以说是滑动手势监听响应。手势类型包含单击、双击、上下滚动、左右滚动、放大缩小等等。

    一次需求是当列表在上下滑动时,监听到最顶端的一个目录分类并显示,这是一个很常见的需求。
    在这里插入图片描述

    实现的需求:点击左侧一级分类可以预览到右侧二级目录内容,右侧滑动时监听屏幕内第一个cell内容属于何分类,左侧滚动并高亮显示。

    正文

    此需求也可以归类于二级目录联动,实现的方法:

    1. 左侧点击事件标志位,右侧滚动到顶部;比较简单不赘述
    2. 右侧滑动监听到最顶部的section分类,可视范围内的第一个单元。

    由于我前期采用的是UICollectionView 来写这个页面,导致一个非常严重的bug:可视范围内的所有cell是乱序的,因此,监听到的cell不一定是最上端的元素。

    解决办法:
    获取到可视范围内的所有元素再排序,确保每次滑动响应的都是第一个最顶部的元素。

    NSArray* visibleCellIndex = self.collectionView.indexPathsForVisibleItems; 
    NSArray *sortedIndexPaths = [visibleCellIndex sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        
      NSIndexPath *path1 = (NSIndexPath *)obj1;            NSIndexPath *path2 = (NSIndexPath *)obj2;       
     return [path1 compare:path2];   
     }];   
    NSIndexPath* indexPath = [sortedIndexPaths firstObject];
    
    cs