2011-11-21 38 views
26

我正在使用故事板,并且当某个按钮被按下(或称为函数)时,我试图隐藏我的主导航控制器的顶部栏。我知道我必须从故事板(使用标识符)初始化一个引用导航控制器的对象,但是当我将setNavigationBarHidden消息发送给这个新创建的对象时,屏幕上并没有真正发生。故事板 - 以编程方式隐藏导航控制器的顶部栏

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UINavigationController *navController = (UINavigationController*) [storyboard instantiateViewControllerWithIdentifier:@"MyNavController"]; 

[navController setNavigationBarHidden:YES animated:YES]; 

有谁知道是什么问题?

+0

您已确认'navController'不等于'nil'? –

+0

是的,试过了,它不是零...奇怪的是,我甚至无法设置此导航控制器的标题,或以任何其他方式与其交互。我真的不知道问题出在哪里......:/ –

回答

67

终于解决了。您应该始终只通过viewController隐藏导航栏。

在我上面的问题中,我实例化了一个全新的导航控制器,它并没有指向屏幕上真正的navController。你可以得到“真正的”一通这样的视图控制器:

[viewController.navigationController setNavigationBarHidden:YES animated:YES]; 
+1

Swift:'self.navigationController?.setNavigationBarHidden(true,animated:false)' –

5

我面临同样的问题,这个工作对我来说

navController.navigationBar.hidden = YES;

0

我隐藏我的导航栏,通过取消选中栏可见性“显示导航栏”在Attribute Inspector.Hope这有助于某人。

enter image description here

14

有2种方式来隐藏导航控制器的顶栏:

1)通过编程

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

2)利用界面生成器

您可以取消选中导航控制器属性列表中的“显示导航栏”。

enter image description here

请确保您已选定的场景包含导航控制器。场景示例图像。
enter image description here

3
在迅速

self.navigationController!.navigationBar.hidden = true 

是这样的:更改属性后

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.navigationController!.navigationBar.hidden = true 
    } 
+0

对于Swift 4,该属性被命名为isHidden – Gerriet

0

SetRoot RootViewController的。

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

// Create Navigation controller with RootViewController 
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[storyBoard instantiateViewControllerWithIdentifier:@"MyRootViewController"]]; 

在任何视图控制器

[self.navigationController setNavigationBarHidden:YES animated:YES]; 
0

设置RootViewController的

[appDelegate.window setRootViewController: navController]; 

,否则你可以做Xamarin.iOS

base.NavigationController.NavigationBarHidden = true; 
1

的答案是正确的。只是想补充一点,您可能希望在离开视图时放回导航栏,因为其他视图可能会使用它,并且当您隐藏所有视图时都会隐藏导航栏。

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.navigationController?.navigationBar.isHidden = true 
    } 

,你离开之前的观点:

override func viewWillDisappear(_ animated: Bool) { 
     super.viewWillDisappear(animated) 
     self.navigationController?.navigationBar.isHidden = false 
} 

`

相关问题