2012-02-21 101 views
4

我正在創建一個庫,它將在應用程序的底部添加一個視圖(當我的庫集成到應用程序中時)。
我使用視圖控制器的視圖的框架參數來獲取視圖的大小和計算我的圖書館的視圖框架並顯示它。
問題是,當導航欄在那裏時,我的視圖仍然在可見的實際視圖下方。所以,我想知道當前視圖控制器是否基於導航控制器,以及導航欄在該視圖中是否可見。我怎麼能找到它?iOS - 檢查導航欄

回答

3

UINavigationBar繼承自並具有所有優良屬性和行爲UIView,其中一個屬性爲hidden

因此,對於您的觀點,如果您可以獲得導航欄的句柄,則只需檢查hiddenYESNO。要做到這一點


一個辦法是有一個UINavigationController財產或訪問(二傳手&吸氣)爲您的庫,因此誰利用圖書館,可以設定導航控制器和/或代表您的圖書館吧。

+0

我知道導航欄的屬性。但如何檢查應用程序是否基於導航控制器?如果該應用基於導航控制器,我可以檢查導航欄的屬性。不是嗎? – Satyam 2012-02-21 11:58:39

+0

如何獲取導航欄的句柄? – Satyam 2012-04-14 02:48:10

+0

如果你在你的視圖控制器或你的應用程序委託中有一個導航控制器,確保它是一個IBOutlet,然後你可以通過['UINavigationController'的navigationBar屬性](https://developer.apple /images/ios/documentation/UIKit/Reference/UINavigationController_Class/Reference/Reference.html#// apple_ref/occ/instp/UINavigationController/navigationBar)(爲您鏈接的文檔) – 2012-04-14 04:47:32

7

我遲到了,但對於其他嘗試做同樣事情的人(如我:D)。

該代碼可以解決你的問題:

id nav = [UIApplication sharedApplication].keyWindow.rootViewController; 
if ([nav isKindOfClass:[UINavigationController class]]) { 
    UINavigationController *navc = (UINavigationController *) nav; 
    if(navc.navigationBarHidden) { 
     NSLog(@"NOOOO NAV BAR"); 
    } else { 
     NSLog(@"WE HAVE NAV BAR"); 
    } 
} 
+0

我已經使用這段代碼很長一段時間,並取得了很大的成功(謝謝)。儘管我最近發現了一個不足之處。如果UIAlertView當前可見,則此功能將失敗。進一步的調查顯示執行以下內容:'(lldb)po nav <_UIAlertShimPresentingViewController:0x7fa00d095fb0>'你有處理這種情況的建議嗎? – alexgophermix 2015-07-15 21:49:26

+0

非常感謝,夥伴。簡單而好。乾杯! – Felipe 2015-09-15 16:55:43

+0

@alexgophermix我認爲你可以使用UIApplication的windows propery數組,並找到你的根控制器,我想在那一刻你將有2個窗口。 – 2015-09-15 23:25:03