如何在添加到 keyWindow 的视图上方显示模式?

Posted

技术标签:

【中文标题】如何在添加到 keyWindow 的视图上方显示模式?【英文标题】:How to Present a Modal above a View that was added to keyWindow? 【发布时间】:2016-03-07 22:05:02 【问题描述】:

我向[[UIApplication sharedApplication] keyWindow] 添加了一个视图,因为我们希望它与导航栏重叠。

现在我们想要点击视图上的一个按钮并以模态方式打开一个窗口,最好使用presentViewController。有没有办法让这个模态视图出现在 keyWindow 视图上方(在 z 轴上)?

我的答案

我最终将我的第一个自定义 UIViewController 添加到 self.tabBarController。这允许UIViewController 与导航栏和标签栏重叠。

然后我使用[self.navigationController presentViewController:animated:completion] 来呈现模态,它高于 z 轴上的一切。

这是将UIViewController 添加到self.tabBarController 的代码

        MyCustomViewController * overlayView = [[MyCustomViewController alloc]
                      initWithNibName:@"MyCustom"
                      bundle:nil];

        UIViewController *parentViewController = self.tabBarController;
        [modalView willMoveToParentViewController:parentViewController];

        // set the frame for the overlayView
        overlayView.view.frame = parentViewController.view.frame;

        [parentViewController.view addSubview: overlayView.view];

        [parentViewController.view needsUpdateConstraints];
        [parentViewController.view layoutIfNeeded];

        // Finish adding the overlayView as a Child View Controller
        [parentViewController addChildViewController: overlayView];
        [overlayView didMoveToParentViewController:parentViewController];

【问题讨论】:

【参考方案1】:

您应该重新考虑添加覆盖视图的方式。

如果您希望视图与导航栏重叠,您可以将此视图添加为导航栏的顶部子视图。或者您可以将其添加为导航控制器视图的顶部子视图。

【讨论】:

抱歉,您能详细说明一下吗?当我查找诸如“导航控制器视图”或“顶部子视图”之类的术语时,我没有找到任何信息。我发现几乎所有关于在Navigation Bar 上放置UIViewController 的东西都说使用keyWindow。 ***.com/questions/21850436/…

以上是关于如何在添加到 keyWindow 的视图上方显示模式?的主要内容,如果未能解决你的问题,请参考以下文章

[UIApplication sharedApplication].keyWindow 添加视图无效,解决方案。

维护添加到 KeyWindow 的自定义 UIView

iOS-如何在 UISplitViewController 详细视图上方添加按钮

UIAlertViews、UIActionSheets 和 keyWindow 问题

如何在 ios 的共享扩展中访问 keyWindow?

如何向 UINavigationController 添加一个在任何子视图上方可见的视图