iOS 可以通过 UISplitView 呈现视图吗?
iOS Presenting a view over a UISplitView Possible?
我一直在努力实现特定的视图呈现。在我的应用程序中,我使用 UISplitViewController 来显示菜单及其内容。我想在整个视图上自定义显示一个视图,如图所示。
消息视图和调暗视图用于信息内容,将在设定的时间段后自动关闭。这可以通过我的 UISPlitViewController.m
完成吗?
我已经尝试了几种方法,但没有达到预期的效果。
创建从 Splitview 到消息视图的转场并从 viewDidLoad / viewDidAppear 调用转场:
[self performSegueWithIdentifier:@"showMessageView" sender:self];
这会加载详细视图中的视图。
尝试从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;
}
我一直在努力实现特定的视图呈现。在我的应用程序中,我使用 UISplitViewController 来显示菜单及其内容。我想在整个视图上自定义显示一个视图,如图所示。
消息视图和调暗视图用于信息内容,将在设定的时间段后自动关闭。这可以通过我的 UISPlitViewController.m
完成吗?
我已经尝试了几种方法,但没有达到预期的效果。
创建从 Splitview 到消息视图的转场并从 viewDidLoad / viewDidAppear 调用转场:
[self performSegueWithIdentifier:@"showMessageView" sender:self];
这会加载详细视图中的视图。
尝试从
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;
}