如何在iPhone中隐藏导航栏?
目前我在iPhone应用程序工作,我有两个屏幕像A和B,A没有导航栏,但B有导航栏。 所以我定了这个
A类:
- (void)viewDidLoad { [super viewDidLoad]; self.title=@"A"; [self.navigationController setNavigationBarHidden:YES]; } -(void)viewWillAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:YES]; }
B类:
- (void)viewDidLoad { [super viewDidLoad]; self.title=@"B"; [self.navigationController setNavigationBarHidden:NO]; } -(void)Previousscreen { [self.navigationController popViewControllerAnimated:YES]; }
然后我运行应用程序,当我去以前的类像B到A的时候蓝色显示在B类下面附加的屏幕截图供您参考。 如何解决这个问题? 请帮帮我
提前致谢
你需要使用这个代码:
[navigationController setNavigationBarHidden: YES animated:YES]
在– (void)viewWillAppear:(BOOL)animation或更高版本在两个类的视图生命周期。 [避免在– (void)viewDidLoad中执行此操作。]
这里的技巧是使用setNavigationBarHidden: animated :方法(代替简单的setNavigationBarHidden:方法)。 这将确保您的用户界面问题消失,并由此产生任何位置问题。
PS检查self.navigationController的值。 navigationBarHidden (而不是self.navigationController。navigationBar.hidden ),如果你需要检查你的导航栏是否隐藏,在某些时候,在你的代码。
把它放在Bclass
-(void)viewWillAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:NO]; }
我不认为你是一个隐藏和dynamic显示导航栏时,你推动控制器的行为是支持的。
简单的解决scheme – 隐藏UINavigationController
的animation栏,如果你想在一些控制器上显示它,只需添加一个UINavigationBar
。
使用下面的行来隐藏viewWillAppear:
navigationBar
viewWillAppear:
方法 –
-(void)viewWillAppear:(BOOL)animated { self.navigationController.navigationBar.hidden=YES; }
尝试设置navigationBarHidden:
在B类的 viewWillDisAppear
中
在Bclass
-(void)viewWillDisAppear:(BOOL)animated { [self.navigationController setNavigationBarHidden:YES]; }
您的代码可以Hide
和Unhide
navigationBar
Unhide
。 问题是你隐藏在viewWillAppear:
Class A
的navigationBar
viewWillAppear:
这只是在出现视图之前调用,所以在加载Class A
视图之前, navigationBar
每次都被隐藏。
如果我们谈论你的蓝色,我认为这是你的window
颜色。 因为在隐藏navigationBar
self.view
,你的self.view
上面会有一个空间,高度是44.0 。 所以有三个选项来修复它。
- 在
Class A
的viewDidAppear:
方法中隐藏Class A
的navigationBar
。 - 设置你的
window
颜色你想显示。 - 你可以添加一个图像到
window
背景,在图像的顶部使navigationBar
与Class B
的navigationBar
相同,所以当原来的navigationBar
被隐藏时,它会看到。
我最近不得不解决这个问题,我发现有必要立即在pushViewController:
和setNavigationBarHidden:YES
之后立即调用setNavigationBarHidden:NO
,在setNavigationBarHidden:YES
之后立即popViewController:
在每个调用中都带有animationYES。
所以,推时:
[nc pushViewController:classBView animated:YES] [nc setNavigationBarHidden:NO animated:YES]
当popup时:
[nc popViewControllerAnimated:YES] [nc setNavigationBarHidden:YES animated:YES]
但就我而言,虽然我可以按照上面的方法推动,但是我不想改变我的B类 ,而是希望它不知道导航栏以前是不是隐藏的(因为它不是我的代码)。 此外,该视图被popup使用正常的后退button,没有显式调用popViewControllerAnimated:
在我的代码中最好的工作是让我的类A成为UINavigationController
委托,并在发生popup时将工具栏隐藏在委托方法调用中。
不幸的是,我发现UINavigationControllerDelegate
方法不是太有用,当推送我的B类视图时,或者从另一个推入的时候popup回来, willShowViewController
& didShowViewController
被无可区分地调用。
我在https://stackoverflow.com/questions/642312/中关于重写UINavigationController
的build议,我做了一些自定义的委托方法,一个是在[super popViewControllerAnimated:]
之后调用。 我的子类是在https://gist.github.com/jpmhouston/6118713和委托方法是:
- (void)navigationController:(UINavigationController *)navigationController isPoppingViewController:(UIViewController *)poppedViewController backTo:(UIViewController *)revealedViewController { if (revealedViewController == self && [poppedViewController isKindOfClass:[MyClassB class]]) { [navigationController setNavigationBarHidden:YES animated:YES]; // ...and more code to run only when going from class B back to class A } }
我相信有更简单的方法来setNavigationBarHidden:
被按下的后退button被调用,但这对我有效。