12

当我将我的UIViewControllerwith设置为时,没有滑入。没有使用过渡。modalPresentationStyleUINavigationControllerUIModalPresentationCurrentContextUIViewController

这是我的代码:

UIViewController *viewController = [[UIViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;

[self presentViewController:navController animated:YES completion:nil];

当我不设置时modalPresenttionStyle,一切正常。但我需要这种风格,因为我想要UIViewController礼物作为叠加。

顺便说一句:当ViewController被解雇时,动画效果很好。

4

5 回答 5

2

根据UIViewController.h标题定义:-

/* 定义当视图控制器以模态方式呈现时将用于此视图控制器的转换样式。在要呈现的视图控制器上设置此属性,而不是在演示者上。默认为 UIModalTransitionStyleCoverVertical. */

因此,您应该将其应用于以下内容presentingViewController:-

UIViewController *viewController = [[UIViewController alloc] init];

 UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
 navController.navigationBarHidden = YES;

//Here is the change
 navController.modalPresentationStyle = UIModalPresentationCurrentContext;

[self presentViewController:navController animated:YES completion:nil];
于 2014-04-10T10:19:33.280 回答
1

如果您希望将UIViewController其呈现为不正确的方法,因为当您这样做时: [self presentViewController:navController animated:YES completion:nil]; 您正在执行模态演示,并且您的父视图控制器不会低于当前视图控制器。相反,您将拥有UIWindow,因此那里可能是黑色的,这不是您想要的。

所以为了做你想做的事,你需要将你的控制器呈现为 childViewController 并将它的视图添加到你的父控制器视图中,如下所示:

UIViewController *viewController = [[UIViewController alloc] init];

[self addChildViewController:viewController];
[self viewWillDisappear:animated];
[self.view addSubview:viewController.view];
[self.view bringSubviewToFront:viewController.view];
[viewController didMoveToParentViewController:parentController];
[self viewDidDisappear:animated];

并删除UIViewController

[controller.view removeFromSuperview];
[controller willMoveToParentViewController:nil];
[controller.parentViewController viewDidAppear:animated];
[controller removeFromParentViewController];
于 2014-02-18T15:47:45.897 回答
1
UIViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MyViewController"];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;

navController.modalPresentationStyle = UIModalPresentationCurrentContext;

[self presentViewController:navController animated:YES completion:nil];

使用故事板标识符启动 viewController,它可能会有所帮助

于 2015-03-24T07:48:29.143 回答
1

如果你想添加一个覆盖,你需要做的第一件事是确保你使用的是 iOS 7 的新 ViewController 转换 API。这里有一个快速教程Objc.io 视图控制器转换

完成后,您应该有一个动画器和一个符合 UIViewControllerTransitioningDelegate 协议的视图控制器。

然后,当您想要展示您的控制器时,您需要将模态展示样式设置为 UIModalPresentationStyleCustom 而不是 CurrentContext。自然,您的动画师将需要配置所呈现控制器的框架,以便您仍然可以看到下面的内容。

这是另一个可能有帮助的教程 -自定义演示文稿

最后但并非最不重要的一点是,您将不得不处理任何方向的演示场景,如果不这样做,您会在旋转时看到奇怪的行为,因为过渡的容器仍然是纵向的。在这里查看我的答案 -任何方向的过渡

于 2014-08-06T20:53:40.143 回答
1

让我知道这是否有帮助,当前视图控制器将被解除以启动动画。

UIViewController *viewController = [[UIViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
navController.navigationBarHidden = YES;

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;

[self dismissViewControllerAnimated:YES completion:^{
  [self presentViewController:navController animated:YES completion:nil];
}];
于 2015-05-26T01:36:56.997 回答