在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?
Posted
技术标签:
【中文标题】在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?【英文标题】:how to still show navigation bar when using segue in full screen modal presentation style? 【发布时间】:2020-02-24 02:51:48 【问题描述】:在过去的一年中,我没有开发 ios 应用程序,因为我必须专注于 android 开发。而且iOS 13 开发也有很多变化
我在导航控制器中有一些像这样的 VC
当我使用 push 从 VC1 到 VC2 并 回到 VC1 时,它会变成这样的卡片。这是我在单击第一个 VC 中的按钮时使用的代码
@IBAction func createEventButtonDidPressed(_ sender: Any)
// do some actions first and then
performSegue(withIdentifier: "chooseEventName", sender: nil)
我曾尝试阅读此 Presenting modal in iOS 13 fullscreen ,所以我制作了这样的全屏模式转场
但它会使VC2中的导航栏(那个蓝色的vc)不会显示。
我已尝试选择 bar 为“半透明导航栏”
但是当我运行该应用程序时,我无法在第二个 VC 中获取该导航栏,使用全屏模式 segue 时导航栏不显示
我真的需要在 iOS 13 之前完全一样的行为。就像使用 push segue 并且导航栏仍然在顶部而不看起来像卡片
怎么做?
【问题讨论】:
【参考方案1】:然后让我们在 iOS 中刷新一下你的想法。
PUSH 需要导航控制器。这使得新屏幕滑动到领先的一侧。如果没有navigationController,那么新屏幕将以模态方式呈现。如果我们想要弹出新屏幕并让用户返回上一个屏幕,我们在代码中使用 POP。
PRESENT 不需要导航控制器。这使新屏幕向上滑动。如果我们想关闭它,我们在代码中使用 DISMISS。如果需要,可以将 navigationController 添加到下一个屏幕。
现在,iOS 13.0 在呈现屏幕方面有什么新变化?默认情况下,屏幕现在将显示为卡片,而不是全屏。
回到你的问题:
我真的需要在 iOS 13 之前完全一样的行为。就像使用 按下 segue,导航栏仍然在顶部,看起来不像 卡片
您需要使用 PUSH 而不是 PRESENT。再次点击该 segue,然后选择 SHOW(这是 Interface Builder 中的推送等效项)。然后点击那个 VC1 并点击 Xcode 的 EDITOR 菜单,Embed In,然后点击 NavigationController。
【讨论】:
喜欢这个i.stack.imgur.com/bYlnw.png ?如果我从 VC 2 回到 VC1,它会使 VC1 像卡片一样 是的,就这样。不,它不会,也不应该。发生这种情况是因为就像我在回答中所说的那样,您需要在您的第一个屏幕 (VC1) 中有一个UINavigationController
。所以点击那个 VC1 ---> 点击位于 Xcode 顶部的 EDITOR ---> Embed In ---> NavigationController.
在我上面的截图中,我实际上已经将 VC 嵌入到导航控制器中。如果我再次嵌入它,我会有 2 个这样的导航控制器吗? i.stack.imgur.com/m8SbT.png 但不幸的是卡片还在
不需要嵌入它,我的错,我没有注意到你的导航控制器。我认为这是一个标签栏控制器。这应该不是那么微不足道,一个推送/显示应该使用一个导航控制器,就是这样。这些卡将仅用于模态/礼物。在阅读我上面的解释的同时创建一个新项目并尝试从那里进行实验怎么样?
是的,当单击第一个 VC 中的那个按钮时,在做了一些操作后,我使用 performSegue(withIdentifier: "chooseEventName", sender: nil)【参考方案2】:
如果您将 VC2 嵌入到它自己的导航控制器中,它将与导航栏一起显示。 所以你的视图应该看起来像 UINav->VC1->UINav->VC2
当呈现全屏和模态视图时,所有以前的导航控制器都不构成新堆栈的一部分。
【讨论】:
以上是关于在全屏模式演示样式中使用 segue 时如何仍然显示导航栏?的主要内容,如果未能解决你的问题,请参考以下文章