在Xcode 6中显示segue将视图控制器作为iOS 7中的一个模式呈现

我有两个视图控制器在我的iPhone应用程序(用swift构build)与Xcode 6.1构build,并使用故事板。

第一个视图控制器embedded在故事板中的导航控制器中,第二个视图控制器的segue是“显示”segue。

当应用程序运行时,它正确地显示了在iOS 8.x中的推送,但在iOS 7.x中,它显示为没有导航栏的模式。

我的应用程序的要求是显示过渡作为一个推动,无论是iOS 7或iOS 8.任何想法,以推动这两个版本的iOS工作?

我看到一个提到这个问题的相关文章,但是找不到解决这个问题的方法: 在storyboard Xcode 6中的自适应segue。是不推荐使用的吗?

任何帮助表示赞赏…

谢谢

这个解决scheme在以下方面与其他解决scheme不同:

  1. 它包括一个检查和validation问题的方法
  2. 这个问题的原因是追溯到源头(一个变化的types)
  3. 解决方法非常简单(删除并重新创build一个新的segue)
  4. 请注意文中的要求

我只是给出了一个非常详细的答案 ,完全解释了发生了什么,为什么,但简单的解决scheme是,你可以删除Segue不推动,然后在故事板上重新创build。 原因是在segue中可能有一点点xml(请参阅扩展答案,例如/说明如何确认这个问题)。

在确认视图层次结构中至less有一个UINavigationController后,请确保该segue不是手动的,并且没有与之关联的操作(通过在源文件中查看故事板中的Segue)。 删除现有的segue,然后按住Ctrl从UIView / UIControl拖动到目标视图控制器,如果需要自定义操作,则在prepareForSegue中拦截对目标控制器的调用。

同时为了确认这个解决scheme适用于您,请执行以下操作:

  • validation你的初始视图控制器(带有箭头)是一个UINavigationController,并且它有一个普通的内容视图控制器,因为它是根视图控制器。 (或者你将你的初始视图控制器embedded到UINavigationController中)
  • 请阅读我对早前对一个非常类似的问题的回应(以上链接)。

您可能已将初始视图控制器分配给您的UIViewController而不是UINavigationController。 另外,select您的UIViewController并检查“是初始视图控制器”选项未选中。

将UINavigationController设置为初始视图控制器

这是解决方法。 它看起来像iOS 7中的Xcode中的错误。您需要创build一个虚拟UINavigationController并将所有免费的UIViewControllers链接到此导航控制器。 为我工作。

对我而言,我的故事板缺less导航控制器。 我以编程方式创build导航控制器,在iOS8中工作正常,但不支持iOS7。

  1. 在故事板中,select主视图控制器,然后在Xcode菜单中select编辑器>embedded>导航控制器
  2. select新的导航控制器,然后在右侧的属性检查器中,在View Controller下 ,确保选中了初始视图控制器
  3. 运行应用程序。 现在应该修好了。

我相信这是Xcode 7.2中的一个错误。 为了解决这个问题,你可以创build一个“Push(deprecated)”segue,然后在Storyboard编辑器中selectsegue并将其改为Show(例如Push)

我有一个确切的问题与“显示(例如推)”的年龄,我刚刚想出来,同时试图推视图控制器上的导航控制器是在一个Popover。 看起来,所谓的视图控制器的上下文是问题。 所以这就是我解决它的方法:

  1. 在执行Segue的View Controller上,勾选Storyboard中的“Defines Context”属性。
  2. 在被调用的视图控制器中,将Presentation属性设置为“当前上下文”。

我碰到这个问题,我发现唯一的解决scheme是使用不推荐使用的“Push”inheritance。

基本上Jomafer的答案是部分正确的。 你正在推动的控制器需要在UINavigationController之前。 你根本不需要推UINavigationController。 只要故事板知道它在UINavigationController中,一切都很好。

我正在用Swift 4使用XCode 9.注意这个版本昨天(9月20日)出来了。

对我来说,这只是一个caching错误。 我不得不select“现在模式”,运行应用程序,然后select“显示(例如推)”。 现在一切正常。

在我的情况下,问题是我把ViewController作为UINavigationController的rootViewController创buildShow(例如Push)segue。 换句话说,我没有UINavigationController。 然后我删除seque, 添加UINavigationController并再次添加seque ,它的工作。 在Xcode 9.0.1 / iOS 11.0.3上testing。

当一个“Show”segue在testing中出现时,通常是两个问题之一:

  1. 第一个视图控制器不在导航控制器内。

  2. 故事板XML已损坏。

#2解决scheme通常是删除和replacesegue,它应该自行更正。 有时只是切换到其他演示风格,运行,并切换回“显示”修复它。

这也可能发生在“显示细节”的细节上,而且可能更隐蔽。

例如:我在UISplitViewController中安排了一系列视图控制器。 他们有Show-> Show-> Show-> Show Detail。 最后一个赛季不断出现模态。 我想尽一切办法解决最后的问题。 问题在于上游的 Show Segue已经被损坏成了Show Detail segue(即使storyboard仍然说这是一个Show segue)。 我一直在iPhone上进行testing,直到我在iPad模拟器上运行,才发现真正的问题。 现在是Show-> Show- > Show Detail – > Show Detail。 在iPhone上,第三个segue看起来就像一个Show,因为它折叠到了导航控制器上。 但是,它仍然是详细的视图控制器,你不能一个细节视图控制器显示细节,所以操作系统做它可以让你的视图控制器在屏幕上,并以模态显示。

第1课:总是在iPad上testing你的UISplitViewController,以确保游戏正在做你的想法。

第二课:如果你的意外情况意外地出现,请检查上游的腐败情况以及有问题的情况。