[英]How to hide navigation bar in 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类以下附加屏幕截图供您参考。 如何解决这个问题? 请帮我
提前致谢
在B类中设置它
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO];
}
您需要使用以下代码:
[navigationController setNavigationBarHidden: YES animated:YES]
in - (void)viewWillAppear:(BOOL)动画或稍后在两个类的视图生命周期中。 [避免在- (void)viewDidLoad中执行此操作。]
这里的技巧是使用setNavigationBarHidden: animated :方法(代替更简单的setNavigationBarHidden:方法)。 这将确保您的UI问题消失,以及由此引起的任何位置问题。
PS检查self.navigationController的值。 navigationBarHidden(而不是self.navigationController。navigationBar.hidden)如果您需要检查,如果您的导航栏是隐藏的,在某些时候,在你的代码。
尝试在B类的 viewWillDisAppear
中设置navigationBarHidden:
.
在B班
-(void)viewWillDisAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:YES];
}
当你正在推动控制器时,我不认为当你隐藏和动态显示导航栏时的行为。
简单的解决方案 - 隐藏UINavigationController
的动画栏,如果你想在某个控制器上显示它,只需添加一个UINavigationBar
即可。
使用下面的行来隐藏viewWillAppear:
navigationBar
viewWillAppear:
方法 -
-(void)viewWillAppear:(BOOL)animated
{
self.navigationController.navigationBar.hidden=YES;
}
您的代码可以Hide
和Unhide
navigationBar
。 问题是你在viewWillAppear:
隐藏了Class A
的navigationBar
viewWillAppear:
在出现视图之前调用它,所以在加载Class A
视图之前,每次都会隐藏navigationBar
。
如果我们谈论你的蓝色,我认为这是你的window
颜色。 因为在隐藏了navigationBar
之后,你的self.view
上方会有一个空格,高度为44.0 。 所以有三种方法可以修复它。
Class A
的viewDidAppear:
方法中隐藏Class A
的navigationBar
。 window
颜色。 window
的背景中,在图像上做出navigationBar
相同的Class B
的navigationBar
,所以当原来navigationBar
会被隐藏起来会看到。 我最近必须解决这个问题,我发现有必要调用setNavigationBarHidden:NO
在pushViewController:
之后立即setNavigationBarHidden:NO
pushViewController:
并且在popViewController:
之后立即执行setNavigationBarHidden:YES
,并在每个调用中使用动画YES。
所以,推动时:
[nc pushViewController:classBView animated:YES]
[nc setNavigationBarHidden:NO animated:YES]
弹出时:
[nc popViewControllerAnimated:YES]
[nc setNavigationBarHidden:YES animated:YES]
但在我的情况下,虽然我可以按上述方式进行推送,但我不想改变我的B类 ,而是希望它不知道以前没有隐藏导航栏(因为它不是我的代码)。 此外,该视图使用普通的Back按钮弹出,没有显式调用popViewControllerAnimated:
. 在我的代码中最有效的方法是让我的类A成为UINavigationController
委托,并在弹出窗口时隐藏委托方法调用上的工具栏。
不幸的是,我发现UINavigationControllerDelegate
方法没有太大的帮助,当推送我的B类视图或从它推动的另一个视图didShowViewController
回到它时, willShowViewController
和didShowViewController
被无法区分地调用。
我按照https://stackoverflow.com/questions/642312/中有关覆盖UINavigationController
的建议,我做了一些自定义委托方法,一个在[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:
按下后退按钮后调用,但这对我setNavigationBarHidden:
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.