当modalPresentationStyle设置为UIModalPresentationCurrentContext时没有动画

zer*_*ent 12 iphone xcode objective-c presentmodalviewcontroller ios

当我提出我UIViewControllermodalPresentationStyle父的UINavigationController设置UIModalPresentationCurrentContext,在UIViewController不滑动,没有使用过渡.

这是我的代码:

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];
Run Code Online (Sandbox Code Playgroud)

当我没有设置modalPresenttionStyle,一切正常.但我需要这种风格,因为我希望UIViewController礼物是叠加的.

BTW:当ViewController被解雇时,动画效果很好.

Jul*_*rio 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];
Run Code Online (Sandbox Code Playgroud)

并删除UIViewController

[controller.view removeFromSuperview];
[controller willMoveToParentViewController:nil];
[controller.parentViewController viewDidAppear:animated];
[controller removeFromParentViewController];
Run Code Online (Sandbox Code Playgroud)