Xcode 6中的"显示"segue将视图控件呈现为iOS 7中的模态

mom*_*per 28 ios uistoryboardsegue swift

我的iPhone应用程序(使用swift构建)中有两个视图控制器,使用Xcode 6.1构建并使用故事板.

第一个视图控制器嵌入在故事板中的导航控制器中,第二个视图控制器的segue是"Show"segue.

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

我的应用程序要求是将转换显示为推送,无论是iOS 7还是iOS 8.任何想法都可以在iOS的两个版本中实现推送?

我看到了一个提到这个问题的相关帖子,但是找不到问题的解决方案:故事板中的自适应segue Xcode 6.推送是否被弃用?

任何帮助表示赞赏......

谢谢

Tom*_* C. 22

此解决方案在以下方面与其他解决方案不同:

  1. 它包括检查和验证问题的方法
  2. 问题的原因可追溯到来源(segue类型的变化)
  3. 解决方案非常简单(删除并重新创建一个新的segue)
  4. 请注意文本中的要求

我只是给出了一个非常详细的SO答案,它完整地解释了发生了什么以及为什么,但简单的解决方案是你可以删除没有推动的Segue,然后在故事板上重新创建它.原因是segue中可能存在xml的损坏(请参阅扩展答案/示例如何确认此问题).

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

另外要确认此解决方案适合您,请执行以下操作:

  • 验证您的初始视图控制器(其上带有箭头)是否为UINavigationController,并且它具有正常的内容视图控制器,因为它是根视图控制器.(或者您将初始视图控制器嵌入UINavigationController中)
  • 阅读我对早期对一个非常相似的问题(上面链接)的回应的扩展评论.


jom*_*fer 10

您可能已将初始视图控制器分配给UIViewController而不是UINavigationController.此外,选择您的UIViewController并检查是否取消选中"是初始视图控制器"选项.

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


小智 6

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


kwa*_*ahn 6

对我来说,我的故事板缺少导航控制器。我正在以编程方式创建导航控制器,它在 iOS8 中运行良好,但在 iOS7 中运行良好。

解决方案

  1. 在故事板中,选择主视图控制器,然后在 Xcode 菜单中,选择Editor > Embed In > Navigation Controller
  2. 选择新的导航控制器,并在右侧的属性检查器中,在View Controller 下,确保选中Is Initial View Controller
  3. 运行应用程序。现在应该修好了。


Aru*_*Das 6

我相信这是Xcode 7.2中的一个错误.为了解决方法,您可以创建一个"推(不推荐)"segue,然后在Storyboard编辑器中选择segue并将其更改为Show(例如Push)