zoukankan      html  css  js  c++  java
  • iOS-隐藏Navigationbar【导航栏无缝圆滑的隐藏】

    1.ViewController

    .m

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.title = @"隐藏导航栏";
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.backgroundColor = [UIColor lightGrayColor];
        button.frame = CGRectMake(10, 100, 60, 30);
        [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
        
        
        self.navigationController.delegate = self;
    }
    - (void)buttonClick{
        ///跳转到KKViewController
        [self performSegueWithIdentifier:@"pusht" sender:nil];
    }

    头部代理

    @interface ViewController ()<UINavigationControllerDelegate>

    代理方法

    - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
        
        [self.navigationController setNavigationBarHidden: [self hiddenBarVc: viewController] animated: animated];
    }
    
    - (BOOL)hiddenBarVc:(UIViewController *)viewController {
        
        BOOL needHideNaivgaionBar = NO;
        
        if ([viewController isKindOfClass: [KKViewController class]]) {
            needHideNaivgaionBar = YES;
        }
        
        return needHideNaivgaionBar;
    }

    2.KKViewController(目标ViewController)

    新建一个KKViewController

    .h

    @property (nonatomic,strong) id popDelegate;

    .m

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.title = @"第二个页面";
        [self popSet];
    }
    - (void)popSet{
        _popDelegate = self.navigationController.interactivePopGestureRecognizer.delegate;
        SEL action = NSSelectorFromString(@"handleNavigationTransition:");
        UIPanGestureRecognizer *popPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self.popDelegate action:action];
        popPanGesture.maximumNumberOfTouches = 1;
        popPanGesture.delegate = self;
        [self.view addGestureRecognizer: popPanGesture];
    }

    头部代理

    @interface KKViewController ()<UIGestureRecognizerDelegate>

    手势代理方法

    - (BOOL)gestureRecognizerShouldBegin:(UIPanGestureRecognizer *)gestureRecognizer{
        
        ///【下面两个方法写一个】
        ///全屏拖动
        CGPoint tragPoint = [gestureRecognizer translationInView:gestureRecognizer.view];
        if (tragPoint.x <= 0){
            return NO;
        }
        else{
            if (self.navigationController.viewControllers.count <= 1){
                return NO;
            }
            else{
                return YES;
            }
        }
        
        
    //    ///局部允许拖动
    //    CGPoint tragPoint = [gestureRecognizer locationInView:gestureRecognizer.view];
    //    NSLog(@"x=%f;y=%f",tragPoint.x,tragPoint.y);
    //    if (tragPoint.x > 60){///拖动的范围
    //        return NO;
    //    }
    //    else{
    //        if (self.navigationController.viewControllers.count <= 1) {
    //            return NO;
    //        }
    //        else{
    //            return YES;
    //        }
    //    }
    }

    效果图

    延伸

    最后再推荐一个Git开源,覆盖全屏pop手势 FDFullscreenPopGesture,它里面也实现了隐藏导航栏的功能,很流畅!

  • 相关阅读:
    【luogu P1343 地震逃生】 题解
    【luogu P3931 SAC E#1
    【luogu P3275 [SCOI2011]糖果】 题解
    【luogu P2947 [USACO09MAR]向右看齐Look Up】 题解
    【luogu P1456 Monkey King】 题解
    【luogu P3377 左偏树(可并堆)】 模板
    【luogu P1993 小K的农场】 题解
    Sqlmap注入Base64编码的注入点
    kali高速更新源以及主题修改方法
    DiscuzX3.1搬家全过程
  • 原文地址:https://www.cnblogs.com/wangkejia/p/7852934.html
Copyright © 2011-2022 走看看