目前我在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类以下附加屏幕截图供您参考。如何解决这个问题?请帮帮我
先谢谢
答案 0 :(得分:2)
在B类中设置
-(void)viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:NO];
}
答案 1 :(得分:1)
您需要使用此代码:
[navigationController setNavigationBarHidden: YES animated:YES]
在 - (void)viewWillAppear:(BOOL)动画 或稍后的两个类的视图生命周期中。 [避免在 - (void)viewDidLoad 中执行此操作。]
这里的技巧是使用 setNavigationBarHidden:动画:方法(代替更简单的 setNavigationBarHidden:方法)。这将确保您的UI问题消失,以及由此产生的任何位置问题。
P.S。如果你检查 self.navigationController。 navigationBarHidden (而不是 self.navigationController。 navigationBar.hidden )的值需要检查导航栏是否在某些时候隐藏在代码中。
答案 2 :(得分:0)
尝试在 B级<{1}}中设置navigationBarHidden:
在 B类
中viewWillDisAppear
答案 3 :(得分:0)
我支持你在推动控制器时动态显示导航栏时的行为。
简单解决方案 - 隐藏UINavigationController
的动画栏,如果您想在某个控制器上显示它,只需向其添加UINavigationBar
即可。
答案 4 :(得分:0)
使用以下行隐藏navigationBar
方法中的viewWillAppear:
-
-(void)viewWillAppear:(BOOL)animated
{
self.navigationController.navigationBar.hidden=YES;
}
答案 5 :(得分:0)
您的代码适用于Hide
和Unhide
navigationBar
。问题是,您在Class A
中隐藏了navigationBar
的{{1}},这是在出现视图之前调用的,因此在加载viewWillAppear:
视图Class A
之前是每次都被隐藏
如果我们谈论你的蓝色,我认为这是你的navigationBar
颜色。因为在隐藏window
之后,navigationBar
上方会有一个空格,其高度 44.0 。所以有三种方法可以修复它。
self.view
的{{1}}方法中隐藏Class A
navigationBar
。Class A
颜色设置为您要显示的颜色。viewDidAppear:
背景,其中图片顶部的window
与window
的{{1}}相同,所以当原始navigationBar
时将隐藏它将会看到。 答案 6 :(得分:0)
我最近必须解决此问题,并且我发现有必要在setNavigationBarHidden:NO
之后立即致电pushViewController:
并在setNavigationBarHidden:YES
之后立即致电popViewController:
,动画为YES每次通话。
所以,推动时:
[nc pushViewController:classBView animated:YES]
[nc setNavigationBarHidden:NO animated:YES]
当弹出时:
[nc popViewControllerAnimated:YES]
[nc setNavigationBarHidden:YES animated:YES]
但在我的情况下,虽然我可以按上述方式进行推送,但我不想改变我的 B类,而是希望它不知道导航栏以前不是隐藏(因为它不是我的代码)。此外,使用常规的“后退”按钮弹出该视图,没有显式调用popViewControllerAnimated:
。在我的代码中最有效的方法是让我的类A 成为UINavigationController
委托,并在弹出窗口时隐藏代理方法调用上的工具栏。
不幸的是,我发现UINavigationControllerDelegate
方法不太有用,willShowViewController
&amp;在推送我的 B类视图或从其推送的另一个视图中弹回它时,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:
会有更简单的方法,但这对我有用。