2013-11-28 66 views
7

我的應用程序的結構如下:UITabBarController> UINavigationController> ViewControllerOne> ViewControllerTwo。 UINavigationBar在底部有標籤欄,現在當用戶導航到第二個視圖控制器時,我希望能夠隱藏標籤欄並替換爲工具欄。我試過這個代碼:工具欄/標籤欄之間交替

[self.navigationController.tabBarController.tabBar setHidden:YES]; 
[self.navigationController.toolbar setHidden:NO]; 

當我運行應用程序標籤欄被隱藏但工具欄不出現。加上,因爲最後一個VC是一個表視圖控制器,當我滾動單元格時,表和視圖底部之間有一個白色的間隙。我該如何解決這個問題?

+0

你在哪裏調用這個方法?它是viewDidAppear:?如果不嘗試在那裏移動它。 – Greg

+0

@Greg我沒有放在那裏,我試過但它沒有奏效。我啓用了第二個視圖控制器上的檢查器的工具欄,並添加了一個項目(也將它連接到我的班級)。但它不起作用。沒有任何表現,還有一個白色的差距。感謝您的意見。 – HusseinB

+0

@Greg在模擬的指標下,檢查員沒問題,我檢查了「顯示工具欄」現在顯示,但標籤欄和工具欄都在每個托盤上。我會找到解決這個問題的方法。 – HusseinB

回答

10

這是行不通的,因爲當你隱藏這樣子視圖不會被適當地調整了標籤欄(這就是爲什麼你得到空白)。你將不得不使用

self.hidesBottomBarWhenPushed = YES; 

在你的init方法awakeFromNib ......然後

[self.navigationController setToolbarHidden:NO animated:YES]; 

在viewDidLoad中爲例。

這樣標籤欄控制器的視圖就會正確佈局,當你隱藏標籤欄時,它就是子視圖。只記得調用self.hidesBottomBarWhenPushed = NO;在第一個視圖控制器中,否則當第二個視圖控制器從導航堆棧中彈出時,標籤欄仍然會隱藏。

+0

感謝您的意見!它確實有用!然而,我把它放在源視圖控制器而不是目標視圖控制器。我把它放在prepareForSegue中:不在init中。 – HusseinB

+0

謝謝!這幫助我完成了我的項目。 – anna

+0

我很困惑是否調用hidesBottomBarWhenPush在第一個VC或第二個VC。最後在awakeFromNib中調用第二個VC,它的功能就像一個魅力。 (添加到ViewDidLoad時沒有工作) –

0

嘗試分配適當的框架工具欄,並添加它來self.tabBarController.view