上滑隐藏导航下拉显示导航

原文
一、好多App都有上下滑动UIScrollview隐藏或者显示导航栏,在这里我说说我觉得有用的几种方法:

1.iOS8之后系统有一个属性hidesBarsOnSwipe

Objective-C代码如下

self.navigationController.hidesBarsOnSwipe = YES;

swift代码如下

self.navigationController?.hidesBarsOnSwipe = true

当使用以上代码时,可以达到效果

2.使用UIScrollViewDelegate一个代理方法
Objective-C代码如下


- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //scrollView已经有拖拽手势,直接拿到scrollView的拖拽手势
    UIPanGestureRecognizer *pan = scrollView.panGestureRecognizer;
    //获取到拖拽的速度 >0 向下拖动 <0 向上拖动
    CGFloat velocity = [pan velocityInView:scrollView].y;
    
    if (velocity <- 5) {
        //向上拖动,隐藏导航栏
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }else if (velocity > 5) {
        //向下拖动,显示导航栏
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }else if(velocity == 0){
        //停止拖拽
    }
}

swift代码如下


func scrollViewDidScroll(scrollView: UIScrollView) {
        
        let pan = scrollView.panGestureRecognizer
        let velocity = pan.velocityInView(scrollView).y
        if velocity < -5 {
            self.navigationController?.setNavigationBarHidden(true, animated: true)
        } else if velocity > 5 {
            self.navigationController?.setNavigationBarHidden(false, animated: true)
        }
        

这种效果最好

3.使用UIScrollViewDelegate另一个代理方法

Objective-C代码如下

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset


{
    if (velocity.y > 0.0) {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    } else if (velocity.y < 0.0){
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }

swift代码如下

func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        if velocity.y > 0 {
            self.navigationController?.setNavigationBarHidden(true, animated: true)
        } else if velocity.y < 0 {
            self.navigationController?.setNavigationBarHidden(false, animated: true)
        }

二、总结:三种方法都可以,我个人觉得第二种方法效果最好,大家可以学习借鉴一下

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,062评论 3 119
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,773评论 4 61
  • 每个人都有选择活自己的权利。 在无数人追着别人活的年代,你去活自己肯定是有意义的。哪怕这过程中喜欢追逐名利也不要紧...
    凯舒阅读 1,630评论 0 1
  • 3月7日作业雨各组最佳文章: 1组:章琳——别小看了整理收纳这个技能 链接:http://mp.weixin.qq...
    王世鹏阅读 1,432评论 0 0
  • 做辅导班多年,有些孩子会开玩笑说:“老师,下学期,我不来了,岂不是学生又少了一个?”看着他们天真的笑脸,我确实不想...
    刘忙不盲阅读 1,135评论 0 0

友情链接更多精彩内容