UINavigationBar 的标题不会随着 push segue 的转换而改变
Posted
技术标签:
【中文标题】UINavigationBar 的标题不会随着 push segue 的转换而改变【英文标题】:UINavigationBar's title doesn't change with transition by push segue 【发布时间】:2019-06-03 10:48:46 【问题描述】:所以,在我的项目中,当点击第一个屏幕上标题为“A”的按钮时,我尝试使用“push”segue。 push segue 到标题为“B”的第二个屏幕的转换总是很顺利,但导航栏标题不会随着转换而改变。 在“B”屏幕上,我在 IBInspector 上将 VC 命名为“B”,这样第二个屏幕的标题应该是“B”。但转换后,标题仍然是“A”,如下图所示。 https://thatnaoki.sakura.ne.jp/image/navBar.gif
该项目属于我工作的一家公司,因此我无法显示代码或更多详细信息,但我试图尽可能详细地告诉您。 第一个画面被“现在的模态”的segue出现。 我将导航控制器设置为“A”屏幕的根 vc。
这是我迄今为止尝试过的。
在第二个 VC 中,我在viewdidload
和 viewdidappear
添加了 navigationItem.title = "B"
和 self.title = "B"
,但两者都不起作用。仍然显示“A”。
在第二个 VC 中,我已经通过属性检查器将 VC 的标题设置为“B”。
在第二个VC中,我添加了self.navigationController?.isNavigationBarHidden = true
,然后navigationbar
被隐藏了。 (当然这并没有直接帮助我,但我只是测试过。)
我试图在这个项目之外创建相同的情况。但我无法在项目之外重现这一点。这意味着我的项目代码必须有这种情况的原因。但我完全不确定是哪部分造成的。
我阅读了有关导航控制器的苹果文档,但他们说“每次***视图控制器更改时,导航控制器都会相应地更新导航栏。”这对我没有多大帮助。
所以,我有点陷入这种情况......
谁能告诉我导航标题不随过渡而改变的任何可能原因?很抱歉没有给出示例代码。
【问题讨论】:
【参考方案1】:尝试在viewDidLoad()
中设置title
和viewController’s
title property
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
self.title = "Your Title Here"
【讨论】:
感谢您的回答!抱歉我忘记写了,但我已经在 viewdidload 和 viewdidappear 上试过了,结果还是一样……仍然没有改变。 你是对的。感谢您的意见!我刚刚添加了它。【参考方案2】:在您的视图控制器内部:
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!"
【讨论】:
以上是关于UINavigationBar 的标题不会随着 push segue 的转换而改变的主要内容,如果未能解决你的问题,请参考以下文章
popViewController 不会删除 UINavigationBar 项目
UISearchBar 的宽度在嵌入 UINavigationBar 时不会改变
SwiftUI 2 .onChange() 中的选取器不会更改 UINavigationBar.appearance()
单击后退按钮时,导航堆栈中 VC 的 UINavigationBar 标题颜色不会改变