2011-11-21 110 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 
} 

`

相關問題