我试图在Product中更改标题,但不知为何navigationItem是不同的。为什么navigationItem在Container中与Product中的不同
class VC1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let controller = Container()
let navigation = UINavigationController(rootViewController: controller)
navigationController?.pushViewController(navigation, animated: true)
}
}
class Container: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(navigationItem)
navigationItem.title = "test"
let controller = Product()
controller.didMove(toParentViewController: self)
self.addChildViewController(controller)
view.addSubview(controller.view)
}
}
class Product: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print(navigationItem)
navigationItem.title = "" // Doesn't remove the title
}
}发布于 2018-08-02 12:16:20
我只是在阅读navigationItem的文档,它说:
这是一个独特的UINavigationItem实例,用于在视图控制器被推到导航控制器上时表示视图控制器。
但是,在您的示例中,嵌入式VC不是导航控制器的直接子级。
所以,我尝试了下面的代码,它起作用了。关键的部分是,如果存在父视图控制器,则我重写navigationItem返回父视图项。
override var navigationItem: UINavigationItem {
if let parentItem = parent?.navigationItem {
return parentItem
} else {
return super.navigationItem
}
}https://stackoverflow.com/questions/51652800
复制相似问题