iOS - 检查导航栏

时间:2012-02-21 06:02:49

标签: ios uinavigationcontroller uinavigationbar

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

3 个答案:

答案 0 :(得分:9)

我回复的时间已经很晚了,但对于其他试图做同样事情的人(比如我: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");
    }
}

答案 1 :(得分:2)

UINavigationBar继承自UIView的所有优良属性和行为,其中一个属性为hidden

因此,对于您的观点,如果您可以获得导航栏的句柄,那么您需要做的就是检查hiddenYES还是NO


一种方法是为您的库提供UINavigationController属性或访问器(setter& getter),这样无论谁使用该库,都可以代表您的库设置导航控制器和/或栏。

答案 2 :(得分:0)

从视图控制器上下文中进行最新检查:

    let navHidden = navigationController?.isNavigationBarHidden ?? true
    if needsCloseButton || navHidden
    {
         // here add an alternative ways to get out since back button is not here, say add a close button somewhere