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

How to Present a Modal above a View that was added to keyWindow?

提问人:Chris 提问时间:3/8/2016 最后编辑:Chris 更新时间:3/9/2016 访问量:595

问:

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

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

我的回答

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

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

下面是将 添加到UIViewControllerself.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];
iOS Objective-C ModalViewController KeyWindow

评论


答:

0赞 Rafał Sroka 3/8/2016 #1

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

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

评论

0赞 Chris 3/9/2016
对不起,但你能对此进行一些扩展吗?当我查找诸如“导航控制器视图”或“顶部子视图”之类的术语时,我没有找到任何信息。我发现的关于将 a 放在上面的几乎所有东西都说要使用 keyWindow。stackoverflow.com/questions/21850436/......UIViewControllerNavigation Bar