UIViewController presentViewController 模态在 iOS7 中没有动画

UIViewController presentViewController modal not animating in iOS7

调用 presentViewController:animated:completion: 不会在 iOS7 中进行动画处理。视图立即出现。动画在 iOS8 中正常工作。在我的应用程序中的三个不同位置调用了当前方法,它们都显示了此行为。它发生在设备和模拟器上。

随后对 dismissViewControllerAnimated:completion: 的调用在所有 iOS 版本中都可以正确设置动画。

代码结构

调用当前方法的视图控制器是UINavigationController的根视图控制器,而这个导航控制器是UITabBarController中的viewControllers之一。

每次调用都很简单,只需按一下按钮即可触发。这是其中一个案例:

GenreViewController *controller = [[GenreViewController alloc] init]; [self presentViewController:controller animated:YES completion:nil];

尝试修复

在每种情况下,行为都没有改变。
任何帮助将不胜感激!

更新 - 修复

原来 UITabBarControllermodalPresentationStyle 属性 设置为 UIModalPresentationCurrentContext。这不会在 iOS7 中设置动画,您必须改用 UIModalPresentationFullScreen 的呈现样式。

根据您的评论

据我所知,如果没有 NavigationController,这个动画是不可能实现的。如果您已经以编程方式创建了所有内容,那么您还需要以编程方式创建 NavigationController 并且必须将 ViewController 之一分配为根 ViewController。然后去礼物ViewController.

在 appDelegate 中创建全局 UINavigationController 在 didFinishLaunchingWithOptions

InitialViewController *initialVC = [[InitialViewController alloc] init];
self.navController = [[UINavigationController alloc] initWithRootViewController:initialVC];
self.window.rootViewController = self.navController;
[self.window makeKeyAndVisible];

然后让您的 Appdelegate Navigation 控制器在特定的 ViewController 您想要进行展示的地方。

可能是您创建的 NavigationController 在 Navigation Hierarchy 中不正确。

你可以用这个

   GenreViewController *addController = [[GenreViewController alloc]

                       init];
   UINavigationController *navigationController = [[UINavigationController alloc]

                             initWithRootViewController:addController];

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

你能检查一下吗:

GenreViewController *controller = [[GenreViewController alloc] init];
controller.view.backgroundColor = [UIColor whiteColor]; // or some color of your choice
[self presentViewController:controller animated:YES completion:nil];

看看它是否有效。我觉得以编程方式使用 UIViewController 时可能会出现问题

原来 UITabBarControllermodalPresentationStyle 属性 设置为 UIModalPresentationCurrentContext。这不会在 iOS7 中设置动画,您必须改用 UIModalPresentationFullScreen 的呈现样式。