iOS - 检查导航栏

问题描述:

我正在创建一个库,它将在应用程序的底部添加一个视图(当我的库集成到应用程序中时)。
我使用视图控制器的视图的框架参数来获取视图的大小和计算我的图书馆的视图框架并显示它。
问题是,当导航栏在那里时,我的视图仍然在可见的实际视图下方。所以,我想知道当前视图控制器是否基于导航控制器,以及导航栏在该视图中是否可见。我怎么能找到它?iOS - 检查导航栏

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

我迟到了,但对于其他尝试做同样事情的人(如我: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>'你有处理这种情况的建议吗? – 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