iOS 可以通过 UISplitView 呈现视图吗?

iOS Presenting a view over a UISplitView Possible?

我一直在努力实现特定的视图呈现。在我的应用程序中,我使用 UISplitViewController 来显示菜单及其内容。我想在整个视图上自定义显示一个视图,如图所示。

消息视图和调暗视图用于信息内容,将在设定的时间段后自动关闭。这可以通过我的 UISPlitViewController.m 完成吗?

我已经尝试了几种方法,但没有达到预期的效果。

  1. 创建从 Splitview 到消息视图的转场并从 viewDidLoad / viewDidAppear 调用转场:

    [self performSegueWithIdentifier:@"showMessageView" sender:self];
    

这会加载详细视图中的视图。

  1. 尝试从viewDidAppear:中的代码实例化:

    MessageViewController *messageVC = [self.storyboard instantiateViewControllerWithIdentifier:@"messageView"];
    [self addChildViewController: messageVC];
    [self.view addSubview: messageVC.view];
    [self presentViewController: messageVC animated:YES completion:nil];
    

这会导致崩溃:

Application tried to present modally an active controller
[self addChildViewController: messageVC];
[self.view addSubview: messageVC.view];
[self presentViewController: messageVC animated:YES completion:nil];

哇哇哇。你只是在这里感到困惑。您不添加子视图控制器 来呈现它。你做一个或另一个。 (这正是运行时让你失望的原因。)

我的建议是展示它。工作正常。请记住从根视图控制器本身呈现,以便生成的呈现视图占据整个屏幕。

我遇到了类似的问题:一旦变暗的叠加层完全可见(显示动画已完成),它后面的 UISplitViewController 就会消失。

我的技巧是将创建后直接呈现的VC的modalPresentationStyle设置为UIModalPresentationOverFullScreen

以下是我的代码:

UIViewController* customShapeController = [self.storyboard instantiateViewControllerWithIdentifier:@"CustomShapeController"];
customShapeController.modalPresentationStyle = UIModalPresentationOverFullScreen;
[self presentViewController:customShapeController animated:YES completion:nil];

这也适用于 segues。确保在 Storyboard 中将 segue 设置为 "Present Modally"。然后在您的详细信息中 VC 调用 segue:

[self performSegueWithIdentifier:@"CustomDrawingSegue" sender:sender];

然后调用 prepareForSegue:,您可以在目标 VC:

上设置 modalPresentationStyle 属性
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UIViewController *dest = (UIViewController *)segue.destinationViewController;
    dest.modalPresentationStyle = UIModalPresentationOverFullScreen;
}