UINavigationController 在 iOS 7 中推送动画不流畅
Posted
技术标签:
【中文标题】UINavigationController 在 iOS 7 中推送动画不流畅【英文标题】:UINavigationController push animation not smooth in iOS 7 【发布时间】:2013-12-31 07:37:53 【问题描述】:我正在开发 ipad 应用程序,其中我使用 UINavigationController
推送另一个视图控制器。一切正常,除了推送动画不流畅。当我按下视图控制器时,当我将视图的背景颜色设置为clearColor
时,我可以看到前一个屏幕。
但这在 ios 6 中可以正常工作。然后我注意到 iOS 7 发行说明中的 UIViewGroupOpacity
来自:
https://developer.apple.com/library/ios/releasenotes/General/RN-iOSSDK-7.0/index.html
我想这会导致制作动画时出现问题。
有没有人知道 iOS 7 中这个问题的解决方案?谢谢。
我也没有任何花哨的代码来推送视图控制器。我正在使用下面的代码来推送
[self.navigationController pushViewController:vc animated:YES];
【问题讨论】:
【参考方案1】:只需添加:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这个:
[[self window] setBackgroundColor:[UIColor whiteColor]];
最终结果:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions
[[self window] setBackgroundColor:[UIColor whiteColor]];
// Override point for customization after application launch.
return YES;
【讨论】:
【参考方案2】:您可以尝试通过项目中的情节提要来实现。您所要做的就是创建包含在 UINavigationController 中的视图控制器,并通过保持控制并从一个 vc 移动到下一个来连接情节提要中的 push segue。然后命名它,并在您呈现视图的 vc 中,实现 prepareSegue 方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if (segue.identifier isEqualToString:<#string#>)
<#UIViewController#> *viewController = segue.destinationViewController;
// do any customization with the above variable
希望对您有所帮助
【讨论】:
感谢您的回复。但我们没有在项目中使用 StoryBoard。【参考方案3】:使用 Arne 在以下问题中提供的 UINavigationController+Retro.h 解决了我的问题
Restore pre-iOS7 UINavigationController pushViewController animation
非常感谢阿恩
【讨论】:
以上是关于UINavigationController 在 iOS 7 中推送动画不流畅的主要内容,如果未能解决你的问题,请参考以下文章
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
从嵌入在 UINavigationController 中的一个视图控制器到另一个 UINavigationController
(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换
关闭 UINavigationController 并呈现另一个 UINavigationController
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller