【问题标题】:How to navigate one to another navigation controller iOS如何导航到另一个导航控制器 iOS
【发布时间】:2018-09-02 17:25:34
【问题描述】:

我的场景我有三个视图控制器 A、B 和 C。A 是根视图控制器,在 A 按钮中单击以导航 B 视图控制器,在 B 侧视图控制器按钮中单击以导航 C 视图控制器。通过下面的代码可以正常工作。

let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "firstview") as? ViewController
self.navigationController?.pushViewController(vc!, animated: true)

但是,每个视图控制器我想显示单独的导航栏或导航控制器。如果我设置栏,它不会覆盖状态栏,但如果我嵌入导航控制器,它会在故事板中显示正确的栏,但输出显示前一个视图控制器栏和后退按钮。在这里,问题是我使 A 视图控制器透明但 B 和 C 也显示透明。我想在 B 和 C 中显示单独的导航栏。

enter image description here

【问题讨论】:

    标签: ios swift storyboard


    【解决方案1】:

    您似乎在根视图控制器上嵌入了导航控制器,当您从一个 Vc 移动到另一个 Vc 时,导航栏与带有后退按钮的根视图控制器相同,这很明显,因为您已将导航控制器嵌入根视图控制器。

    您可以做的一件事是不要像这样进行转场:

    self.navigationController?.pushViewController(vc!, animated: true)
    

    你可以试试;

    self.present(vc, animated: true, completion: nil)
    

    此代码在没有导航控制器的情况下显示您的视图控制器 B 和 C

    【讨论】:

    • 请在主线程中做这些事情 DispatchQueue.main.async { //whatever you want to do in interface }
    • 在 Swift 中,任务可以同步或异步执行。同步函数只有在任务完成后才返回当前队列的控制权。它阻塞队列并等待任务完成。在发送任务以在不同队列上执行后,异步函数立即返回对当前队列的控制。它不会等到任务完成。它不会阻塞队列。
    【解决方案2】:

    您将需要使用

    修改/更新导航栏的标题
    self.navigationItem.title = "your_title"
    

    如果你想给导航栏添加一些花哨的视图,你可以使用这个

    func updateTitle(_ title: String?) {
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 44, height: 400))
        label.text = title
        label.backgroundColor = .clear
        label.textColor = .white
        self.navigationItem.title = ""
        self.navigationItem.titleView = label
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多