UINavigationBar的标题不会随着推segue的过渡而改变

时间:2019-06-03 10:48:46

标签: swift uinavigationcontroller uinavigationbar

因此,在我的项目中,当第一个屏幕上的标题为“ A”的按钮被点击时,我试图使用“ push” segue。 按下推键切换到标题为“ B”的第二个屏幕的过渡总是顺利进行,但导航栏标题不会随过渡而变化。 在“ B”屏幕上,我在IBInspector上将VC命名为“ B”,以便第二个屏幕的标题应为“ B”。但是过渡后,标题仍为“ A”,如下图所示。 https://thatnaoki.sakura.ne.jp/image/navBar.gif

该项目属于我工作的公司,因此我无法显示代码或更多详细信息,但我想尽一切可能告诉您。 通过“模态呈现”的顺序出现第一个屏幕。 我将导航控制器设置为“ A”屏幕的根vc。

这是我到目前为止尝试过的。

  • 在Second VC中,我在navigationItem.title = "B"self.title = "B"处分别添加了viewdidloadviewdidappear,但是都没有用。仍然显示“ A”。
  • 在第二个VC中,我已经通过属性检查器将VC的标题设置为“ B”。
  • 在Second VC中,我添加了self.navigationController?.isNavigationBarHidden = true,然后隐藏了navigationbar。 (当然,这并不能直接帮助我,但我刚刚进行了测试。)

我试图在此项目之外创建相同的情况。但是我无法在项目外部重现此内容。这意味着我项目的代码必须有这种情况的原因。但是我完全不确定是哪个原因造成的。

我阅读了有关导航控制器的Apple文档,但他们说:“每次顶级视图控制器更改时,导航控制器都会相应地更新导航栏。”这对我没有太大帮助。

所以,我有点陷入这种情况...

有人可以给我任何可能的原因,为什么导航标题不会随过渡而变化吗?非常抱歉没有提供示例代码。

2 个答案:

答案 0 :(得分:1)

尝试将title中的viewController’s title property设置为viewDidLoad()

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.title = "Your Title Here"
    }
}

答案 1 :(得分:0)

在View Controller内部:

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.        
    if segue.identifier == "yadadada" {
        if  let nc = segue.destination as? UINavigationController {
            if let ti = nc.navigationBar.topItem {
                ti.title = "Yeah!"
            }
        }
    }        
}