Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS-检查导航栏_Ios_Uinavigationcontroller_Uinavigationbar - Fatal编程技术网

iOS-检查导航栏

iOS-检查导航栏,ios,uinavigationcontroller,uinavigationbar,Ios,Uinavigationcontroller,Uinavigationbar,我正在创建一个库,它将在应用程序底部添加一个视图(当我的库集成到应用程序中时)。 我正在使用view controller的view's frame参数获取视图的大小,并根据该参数计算库的view frame并显示它。 问题是,当导航栏在那里时,我的视图仍然低于实际可见视图。所以,我想知道当前视图控制器是否基于导航控制器,以及导航栏是否在该视图中可见。如何找到它?UINavigationBar继承并具有UIView的所有优良属性和行为,其中一个属性是 因此,对于您的视图,如果您可以获得导航栏的控

我正在创建一个库,它将在应用程序底部添加一个视图(当我的库集成到应用程序中时)。
我正在使用view controller的view's frame参数获取视图的大小,并根据该参数计算库的view frame并显示它。

问题是,当导航栏在那里时,我的视图仍然低于实际可见视图。所以,我想知道当前视图控制器是否基于导航控制器,以及导航栏是否在该视图中可见。如何找到它?

UINavigationBar
继承并具有
UIView
的所有优良属性和行为,其中一个属性是

因此,对于您的视图,如果您可以获得导航栏的控制柄,则只需检查
隐藏的
是否为



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

我的回复迟到了,但对于其他尝试做同样事情的人(如我: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");
    }
}

来自视图控制器上下文的最新检查:

    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

我知道导航栏的属性。但如何检查应用程序是否基于导航控制器?如果应用程序基于导航控制器,我可以检查导航栏的属性。不是吗?我如何获得导航栏的句柄?如果您的视图控制器或应用程序代理中有一个导航控制器,请确保它是一个IBOutlet,然后您可以通过(为您链接的文档)访问导航栏。我正在创建一个库。当开发人员将我的库集成到他们的应用程序中时,我想知道应用程序是否有导航栏。我知道iOS库中检查导航栏的可用方法。一种方法是使用
UINavigationController
属性或访问器(setter&getter)对于您的库,无论谁使用该库,都可以代表您的库设置导航控制器和/或导航栏。我使用此代码段很长时间,并取得了很大成功(谢谢)。不过,我最近发现了一个缺口。如果UIAlertView当前可见,此功能将失败。执行后进一步调查发现如下情况:
(lldb)po nav
您对处理此案件有何建议?@alexgophermix我认为您可以使用UIApplication中的windows Property数组并找到您的根控制器,我想在那一刻您将在那里有两个窗口。@CornelDamian感谢您的建议,我会试试:)它对我来说很好用,即使尝试从图书馆访问,你也节省了我的时间。这个问题已经问了好几年了,提供的答案被标记为低质量的帖子供审查。这里有一些指导原则。还有一些其他的答案提供了OP的问题,它们是在一段时间前发布的。在发布答案时,请确保添加新的解决方案或更好的解释,尤其是在回答旧问题时。