如何在添加到 keyWindow 的视图上方呈现模式?
How to Present a Modal above a View that was added to keyWindow?
我已将视图添加到 [[UIApplication sharedApplication] keyWindow]
,因为我们希望它与导航栏重叠。
现在我们要点击视图上的按钮并以模态方式打开 window,最好使用 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];
您应该重新考虑添加叠加视图的方式。
如果您希望视图与导航栏重叠,您可以将此视图添加为导航栏的顶部子视图。或者您可以将其添加为导航控制器视图的顶部子视图。
我已将视图添加到 [[UIApplication sharedApplication] keyWindow]
,因为我们希望它与导航栏重叠。
现在我们要点击视图上的按钮并以模态方式打开 window,最好使用 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];
您应该重新考虑添加叠加视图的方式。
如果您希望视图与导航栏重叠,您可以将此视图添加为导航栏的顶部子视图。或者您可以将其添加为导航控制器视图的顶部子视图。