iOS导航栏的问题总结

2017-11-30  本文已影响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导航栏改变了那些东西

上一篇下一篇

猜你喜欢

热点阅读