在View1
点我隐藏navigationBar
中的viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:YES];
}
然后我导航到显示View2
navigationBar
- (void)viewDidLoad
{
[super viewDidLoad];
[self.navigationController setNavigationBarHidden:NO];
self.title = @"Title";
}
但是再次回到View1
,navigationBar
无法隐藏,即使我曾尝试在pushViewController
View2
之后隐藏[self.navigationController pushViewController:View1 animated:YES];
[self.navigationController setNavigationBarHidden:YES];
viewWillAppear
我还试图在View1中隐藏navigationBar
的导航并隐藏它,但是有一个难看的延迟,我觉得这不是一个好习惯。
所以任何人都可以帮我解决这个问题,如何正确隐藏View1
回{{1}}?
答案 0 :(得分:1)
做你想做的事情的最佳做法是在你的第一个viewController:
- (void)viewWillAppear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:YES animated:animated];
[super viewWillAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated{
[self.navigationController setNavigationBarHidden:NO animated:animated];
[super viewWillDisappear:animated];
}
答案 1 :(得分:0)
-(void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.navigationController setNavigationBarHidden:YES];
}
答案 2 :(得分:0)
您的代码是正确的,但您需要这样写:
[self.navigationController setNavigationBarHidden:YES];
首先,然后写
[self.navigationController pushViewController:View1 animated:YES];
答案 3 :(得分:0)
ViewController1
不会再次分配,因此不会调用viewDidLoad。
您可以在viewWillAppear
中执行此操作。但如果你说有延迟,你可以再做一件事。
您可以在ViewController2中获取ViewController1的引用。假设ViewController1是导航控制器中的第一个控制器,然后执行以下操作:
//ViewController2.m
- (IBAction)backButtonPressed:(id)sender{
ViewController1 *view1 = [self.navigationController.viewControllers objectAtIndex:0];
[view1.navigationController setNavigationBarHidden:YES];
答案 4 :(得分:-1)
从[{1}} View2
View2
看navigation stack
View1
而不是deallocated
获取View2
。它在堆栈中。因此,当您弹出View1
时,setNavigationBarHidden
viewDidLoad不会被调用。所以隐藏导航栏的代码ViewWillAppear
不会执行。因此,请将该代码放到ViewDidAppear
或- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES];
}
,因为每次View出现时都会调用这些方法。
{{1}}