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:至于为什么上面那种方法为什么失效了,本人也不知道。