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];
尝试修复
- 显式分派到主线程
- 演示前调用
[UIView setAnimationsEnabled:YES]
- 添加延迟以显示控制器(只是为了看看会发生什么)
在每种情况下,行为都没有改变。
任何帮助将不胜感激!
更新 - 修复
原来 UITabBarController
将 modalPresentationStyle
属性 设置为 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 时可能会出现问题
原来 UITabBarController
将 modalPresentationStyle
属性 设置为 UIModalPresentationCurrentContext
。这不会在 iOS7 中设置动画,您必须改用 UIModalPresentationFullScreen
的呈现样式。
调用 presentViewController:animated:completion:
不会在 iOS7 中进行动画处理。视图立即出现。动画在 iOS8 中正常工作。在我的应用程序中的三个不同位置调用了当前方法,它们都显示了此行为。它发生在设备和模拟器上。
随后对 dismissViewControllerAnimated:completion:
的调用在所有 iOS 版本中都可以正确设置动画。
代码结构
调用当前方法的视图控制器是UINavigationController
的根视图控制器,而这个导航控制器是UITabBarController
中的viewControllers
之一。
每次调用都很简单,只需按一下按钮即可触发。这是其中一个案例:
GenreViewController *controller = [[GenreViewController alloc] init];
[self presentViewController:controller animated:YES completion:nil];
尝试修复
- 显式分派到主线程
- 演示前调用
[UIView setAnimationsEnabled:YES]
- 添加延迟以显示控制器(只是为了看看会发生什么)
在每种情况下,行为都没有改变。
任何帮助将不胜感激!
更新 - 修复
原来 UITabBarController
将 modalPresentationStyle
属性 设置为 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 时可能会出现问题
原来 UITabBarController
将 modalPresentationStyle
属性 设置为 UIModalPresentationCurrentContext
。这不会在 iOS7 中设置动画,您必须改用 UIModalPresentationFullScreen
的呈现样式。