美文网首页
iOS导航栏的问题总结

iOS导航栏的问题总结

作者: 七里田间的守望者 | 来源:发表于2017-11-30 18:44 被阅读7次

    场景一:当我们需要让一个页面的导航栏隐藏的时候,再从其他页面返回到这个页面的时候,会出现一大片空白

    • 一般我们的做法
    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        self.navigationController.navigationBar.hidden = YES;
    }
    
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        self.navigationController.navigationBar.hidden = NO;
    }
    
    • 这种做法会引起什么问题我就不贴图了~~

    解决办法

    • 首先第一点隐藏导航栏
    //这种隐藏导航栏的方式 是隐藏整个导航栏控制器
    self.navigationController.navigationBar.hidden = YES;
    
    //如果你只是想要隐藏导航栏上面那一块的话 你应该这么写
    self.navigationController.navigationBarHidden = YES; 或者
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    
    • 解决问题的办法
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        if (self.navigationController.childViewControllers.count > 1) {
             [self.navigationController setNavigationBarHidden:NO animated:YES];
        }
    }
    
    • 当然如果你如果只是单纯想隐藏导航栏的话,其实还有一种私立

    让导航栏透明度为0就可以了

    • 解决方法有两种
      - 方案一
    [self.navigationController.navigationBar subviews] objectAtIndex:0].alpha = 0.0;
    
      - 方案二
    //创建一个view
     UIView * alphaView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height + 20)];
    [self.navigationController.view insertSubview:alphaView belowSubview:self.navigationController.navigationBar];
    
    PS:如果你想动态的改变导航栏的透明度的话,可以把alphaView设置为成员变量,动态的去改变就行了
    
    - 方案三
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
    

    场景二 不知道由于什么原因你想让当前页面系统自带的手势滑动返回给隐藏的话

    • 一般做法
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    (然而你试很多次并没有什么卵用)
    
    • 解决办法
    id target = self.navigationController.interactivePopGestureRecognizer.delegate;
    UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:target action:nil];
    [self.view addGestureRecognizer:pan];
    <注意一定要把手势加载view上>
    PS:至于为什么上面那种方法为什么失效了,本人也不知道。
    

    本文会长期更新关于导航栏的一些问题的 希望观众老爷们给小的一个小小的关注下次会更新iOS 11导航栏改变了那些东西

    相关文章

      网友评论

          本文标题:iOS导航栏的问题总结

          本文链接:https://www.haomeiwen.com/subject/mjcbbxtx.html