【问题标题】:TabBar embedded NavigationController bar disappears when segue to another ViewController当转到另一个 ViewController 时,TabBar 嵌入式 NavigationController 栏消失
【发布时间】:2018-05-10 01:27:22
【问题描述】:

我有一个连接到 3 个 UINavigationControllers 的 UITabBarController。它们中的每一个都有一个 UIViewController 作为根视图控制器。当我单击其中一个 ViewController (VC1) 中的按钮时,我希望它与新的 ViewController (VC2) 保持一致。很简单。

在运行期间,当 segue 发生并出现 VC2 时,导航栏消失。

导航栏出现在storyBoard/interface builder中,segue是类型:present(Push)。

VC1 中的代码:

@IBAction func create_clicked(_ sender: Any) {
    performSegue(withIdentifier: "segueIdentifier", sender: self)
}

了解 UITabBarController tabBar 是如何实例化的可能会有所帮助:

func login() {

    let storyBoard = UIStoryBoard(name: "Main", bundle: nil)
    let tabBar = storyBoard.instantiateViewController(withIdentifier: "tabBar")

    window?.rootViewController = tabBar
}

请帮忙。

【问题讨论】:

  • 你用的是什么类型的segue?
  • 当前(推)segue
  • VC2 的 Storyboard 中是否显示导航栏?
  • 是的:导航栏确实显示在 VC2 的情节提要中
  • "present (Push)" 这没有意义。 presentpush相反的。是哪个????

标签: ios swift xcode uinavigationcontroller uitabbarcontroller


【解决方案1】:

经过大量实验后,我们确定即使 Interface Builder这是一个 Show (Push) segue,即使我们一开始是在 Navigation Controller 中, 它表现得像一个 Present Modally segue。

因此,我们使用 Interface Builder 中的弹出菜单更改了 segue 类型,从 Show (Push) 更改为 plain Push,尽管这已被弃用 - 并且界面正常工作。

然后我们将其改回显示(推送),界面继续正常工作。问题解决了!

我怀疑故事板在某种程度上被破坏了。显然,Interface Builder 不应该对你说这是什么类型的 segue,但基本上,它似乎一直在做这件事。

EDIT 很明显,这个问题是由 Show Detail segue 并将其更改为 Show 引起的。当你这样做时,它仍然是一个 Show Detail segue,在这种情况下它表现为一个模态演示。这是一个 Xcode 错误!我报告了它,Apple 现在表示这将在 Xcode 9.3 中修复。

【讨论】:

  • @vacawama 我们做到了,就像夏洛克·福尔摩斯一样。我们排除了所有其他可能性,得出的结论是,尽管有种种表象,但这根本不是 Push segue。我不知道这是可能的!
  • 从原始项目开始,将 Storyboard 视为源并将其与更改为 Push 并返回 Show(Push) 后的 Storyboard 文件进行比较,这将是一个有趣的实验。
  • @vacawama 之前:<segue destination="tqh-u7-1Yx" kind="show" identifier="S_home-createGroup" action="showDetailViewController:sender:" id="5pZ-1W-mSH"/> 之后:<segue destination="tqh-u7-1Yx" kind="show" identifier="S_home-createGroup" id="5pZ-1W-mSH"/> 注意虚假动作。
  • @vacawama 我会告诉你怎么做!如果您最初将 segue 设置为 Show Detail segue,然后将其更改为 Show segue,就会发生这种情况。我只是在一个普通的香草项目中尝试过。 — 所以现在它被标记为 Show,但它的行为仍然像 Show Detail — 并且在其正确的上下文之外,Show Detail segue 将退回到像 Present 一样的行为。
  • 我将此报告为一个错误,根据 Apple 的说法,它已在 Xcode 9.3 中修复:“将 segue 从“显示详细信息”更改为“显示”不再保留显示详细信息的操作选择器。 . (23505175)"
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2020-11-14
  • 2018-06-04
  • 1970-01-01
相关资源
最近更新 更多