Viewcontroller 的导航栏添加到标签栏控制器内导航控制器的导航栏下方

Viewcontroller's navigation bar is added below navigation controller's navigation bar inside tab bar controller

我有一个标签栏控制器,它有一个带有视图控制器的导航控制器。 由于某些未知原因,视图控制器的导航栏看起来不像往常那样。相反,视图控制器的导航栏被添加到导航控制器的下方。

当我在显示选项卡栏控制器之前查看第一个导航控制器中嵌入的视图控制器时,它按预期工作。

这是它应该的样子

还有这个

现在,当我转到 Tab Bar Controller 时,它有一个新的导航控制器,嵌入了一个视图控制器,它看起来像这样:

我不想在导航控制器提供的导航栏下方添加一个额外的导航栏。 我希望视图控制器的标题和项目与导航控制器合并。 所以最终结果应该显示一行带有后退按钮、标题和栏按钮项目(搜索图像)

我错过了什么?

我也尝试过以编程方式添加导航项,但似乎没有任何效果。

Project on github

我的代码

    //
//  SideViewController.swift
//  Sample
//
//  Created by  on 08.02.20.
//  Copyright © 2020 . All rights reserved.
//

import UIKit

class SideViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        title = "Search"

    }
    @objc func action(){

    }

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

我发现有两种方法可以解决这个问题,要么以模态方式显示标签栏控制器,要么在加载视图时隐藏标签栏控制器的导航栏。

第一个解决方案可以这样实现:

  1. 打开Main.storyboard。
  2. Select 这个情节提要中的最后一个 segue(导航到 Side 情节提要的一个)。
  3. 确保您选择了 Attribute Inspector。现在将 Kind 属性更改为 Present Modally 并将 Presentation 属性更改为 Full Screen

第二种解决方案可以这样实现:

  1. 通过选择 File > New > File > [=21= 创建新文件]Cocoa触摸Class并按下一步。
  2. Subclass of: 更改为 UITabBarController 并将您的 class 命名为您认为有意义的名称。
  3. 然后在 viewDidLoad() 内粘贴此 navigationController?.navigationBar.isHidden = true 以隐藏当前导航栏。
  4. 通过选择 TabViewController 并将 Class 属性更改为 Side 故事板中的 class 分配给 TabViewController您在 Identity Inspector 中的 class 姓名。当您输入 class 名称时,它应该会自动完成。按 Enter 以确保您确认更改。

记住只做这两个解决方案中的一个。具体是哪一款,看你的需求了。