推送视图控制器未推送 ios 7

Posted

技术标签:

【中文标题】推送视图控制器未推送 ios 7【英文标题】:Push view controller is not pushing on ios 7 【发布时间】:2015-07-01 18:59:54 【问题描述】:

我有 3 个 VC(视图控制器)(VC1、VC2、VC3)。

在VC1,我使用了代码:

self.navViewController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.navViewController.view.frame = CGRectMake(self.view.frame.size.width - viewController.view.frame.size.width, 
                                               viewController.view.frame.origin.y, 
                                               viewController.view.frame.size.width, 
                                               viewController.view.frame.size.height);
[self.navigationController addChildViewController:self.navViewController];
[self.navigationController.view addSubview:self.navViewController.view];
[self.navViewController didMoveToParentViewController:self.navigationController];

VC2 正在显示,然后在 VC2 我使用代码将导航控制器推送到 VC3

VC3 *vc3 = [[VC3 alloc] initWithNibName:@"VC3" bundle:nil];
[vc3.view updateConstraintsIfNeeded];
[self.navigationController pushViewController:vc3 animated:YES];

目前,当我添加 sn-p 代码 [vc3.view updateConstraintsIfNeeded]; 时。我看到导航改变和内容视图没有改变和显示。它只是显示了 VC2 的内容视图。

在我的项目中,我使用的是自动布局。我尝试在我的项目中删除自动布局,它运行良好。当我添加自动布局时,它会出错。

它只发生在 ios 7 上,iOS 8 运行良好。

请帮我解决这个错误。非常感谢!

【问题讨论】:

【参考方案1】:

问题是您将 VC2 显示在推送的视图控制器之上。将一个视图控制器作为导航控制器的子级的原因是什么?相反,拥有 VC2 和导航控制器的共同祖先,或者将 VC2 放在视图层次结构中的其他位置,而不是位于导航控制器的 view 之上,后者包含整个导航控制器(包括推送中包含的控制器) stack) 视图层次结构。

【讨论】:

你的回答是对的。不过,我有一个小问题。为什么它只出现在 iOS 7 上? 很可能是内部视图层次结构发生了变化,或者 Apple 将推送的视图置于其他视图之上。

以上是关于推送视图控制器未推送 ios 7的主要内容,如果未能解决你的问题,请参考以下文章

IOS / Objective-C / Storyboard:推送视图控制器的后退按钮未激活

iOS 7 UINavigationController 推送动画阴影

当项目使用自动布局时,导航控制器无法在 iOS 7 中推送视图控制器

UINavigationController 在 iOS 7 中推送动画不流畅

iOS 7 中的 iOS 6 滑动推送控制器动画

推送视图控制器未出现在标签栏控制器下方