0

1)以下三行代碼有什麼區別?隱藏導航條?

2)此外爲什麼只有代碼工作的第三行,如果我返回到的viewController和以前的viewController已設置的導航欄,通過同樣的方法[self.navigationController setNavigationBarHidden:NO]我的假設是,所有三條線做同樣隱藏事情?

self.navigationController.navigationBar.hidden = NO; 
[self.navigationController.navigationBar setHidden:NO]; 
[self.navigationController setNavigationBarHidden:NO]; 

追問:

爲什麼當我需要運行此代碼:

[self.navigationController.navigationBar setBackgroundImage:incorrectAnswerNavigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; 

它僅適用,工作是設置背景圖片,否則導航欄只是白。

,如果我有這兩個行:

[self.navigationController setNavigationBarHidden:NO]; 
self.navigationController.navigationBar.hidden = NO; 

如果我離開了self.navigationController.navigationBar.hidden = NO;的導航欄的空間彈出下來,但它只是白色的,沒有背景圖像。如果我的兩條線都有效,並且有背景圖片。

回答

2

前兩個功能相同;不同的是一個使用點符號而另一個不使用點符號。這兩種方法都會在導航控制器上的navigationBar屬性上激發- (void) setHidden:(BOOL)hide

現在第三個是完全不同的方法。它是- (void) setNavigationBarHidden:(BOOL)hide,並在UINavigationController上定義。這個工作原因是這種方法是通知導航控制器,希望導航欄隱藏,而前兩個手動設置導航欄隱藏。如果UINavigationController調用任何修改導航欄的隱藏屬性的方法,則前兩個更改會被撤消,因此爲什麼setNavigationBarHidden:方法已創建,因此您可以通過方法通知UINavigationController,無論它做了什麼,它都應該隱藏導航酒吧,而不是改變它顯示。

編輯:對於這個問題的第二部分,你實際上需要在UINavigationController上致電- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated。這是UINavigationController的適當文檔化方法。

+0

謝謝你花時間解決這個問題。我有點擔心。然而,爲什麼我會用另一種呢? – drc 2013-04-29 03:17:48

+0

隨着前兩個,你可以互換;這是一種風格選擇。但是,爲了隱藏導航欄,您希望使用Apple提供的已記錄方法來隱藏導航欄,因爲如果您使用第一種方法,則無法保證UINavigationController中的Apple方法不會撤消您的更改二。第三個保證它會隱藏,因爲你不會手動搞亂導航條的隱藏屬性。 – Nobosi 2013-04-29 03:29:05

+0

謝謝!但是,這種方法[self.navigationController.navigationBar setBackgroundImage:不工作,如果我只調用[self.navigationController setNavigationBarHidden:NO];而不是也self.navigationController.navigationBar.hidden我以爲他們改變了同樣的屬性? – drc 2013-04-29 03:32:56