2018-01-05tableView滑动监听

今天我的同事遇到一个需求,需要在上滑的时候显示导航栏,下滑的时候隐藏导航栏。

监听上滑与下滑这个动作,怎么实现?

方案一

通过偏移量量计算,可以实现。问题是实时性太高。如果使用MJRefresh框架时,有上下拉刷新的动画,这个也会触发这种监听。

方案二

其次同事想到监听这个偏移位置,如果越过如200这个位置,我们才做操作。这个方法可以避开动画刷新。但是,当可滑动区域足够大呢?上滑显示,很难滑到这个位置。

方案三

其次,我想到touchBegan 与touchEnded的方法,但是我很快发现:tableView的这个方法并不执行。而且是我创建的自定义tableView也不执行。
查资料:tableView不响应对应的touch事件方法
这个链接里说采取手势的方法,但是这个也有缺陷。如果tableView上有可以响应的按钮,手势响应会替代这个按钮响应、

方案四

监听移动位移偏移量,向上或者向下移动大于200,执行不同的对应操作。
首先:在scrollViewWillBeginDragging开始前记录好滑动的最初位置
然后在滑动过程中进行判断:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//    NSLog(@"Scrolling:%f,%f",scrollView.contentOffset.x,scrollView.contentOffset.y);
    if(scrollView.contentOffset.y -self.oldY > 200){
        self.oldY = scrollView.contentOffset.y;
        NSLog(@"下滑隐藏!");
        [self.table mas_updateConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.view);
        }];
    }
    if(scrollView.contentOffset.y- self.oldY < -200){
        self.oldY = scrollView.contentOffset.y;
        NSLog(@"上滑显示!");
        [self.table mas_updateConstraints:^(MASConstraintMaker *make) {
            make.top.equalTo(self.view).offset(44);
        }];
    }
}

为什么选择200,因为在我测试下拉的时候,最大限度的弹簧效果差不多在-190~-196之间,选择200正好避免这种情况。

最终:同事在方案二中在界面底部加了一个上滑到顶部的按钮。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容