繁体   English   中英

如何在iPhone中隐藏导航栏?

[英]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;
}

您的代码可以HideUnhide navigationBar 问题是你在viewWillAppear:隐藏了Class AnavigationBar viewWillAppear:在出现视图之前调用它,所以在加载Class A视图之前,每次都会隐藏navigationBar
如果我们谈论你的蓝色,我认为这是你的window颜色。 因为在隐藏了navigationBar之后,你的self.view上方会有一个空格,高度为44.0 所以有三种方法可以修复它。

  • Class AviewDidAppear:方法中隐藏Class AnavigationBar
  • 设置要显示的window颜色。
  • 您可以添加到图像window的背景中,在图像上做出navigationBar相同的Class BnavigationBar ,所以当原来navigationBar会被隐藏起来会看到。

我最近必须解决这个问题,我发现有必要调用setNavigationBarHidden:NOpushViewController:之后立即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回到它时, willShowViewControllerdidShowViewController被无法区分地调用。

我按照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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM