问题描述
我创建了演示项目来显示问题.
I created demo project to show the problem.
我们在 UINavigationController 中有两个视图控制器.
We have two view controllers inside UINavigationController.
MainViewController
是根目录.
class MainViewController: UIViewController {
lazy var button: UIButton = {
let button = UIButton()
button.setTitle("Detail", for: .normal)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Main"
view.backgroundColor = .blue
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
button.widthAnchor.constraint(equalToConstant: 150).isActive = true
button.heightAnchor.constraint(equalToConstant: 42).isActive = true
button.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
}
@objc func buttonTapped(_ sender: UIButton) {
navigationController?.pushViewController(DetailViewController(), animated: true)
}
}
以及被推送的 DetailViewController
.
class DetailViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
}
}
如你所见,我想在 DetailViewController
中隐藏 UINavigationBar
:
As you can see I want to hide UINavigationBar
in DetailViewController
:
问题
问题在于,UINavigationBar 与整个 MainViewController 一起滑开而不是留在原地.我怎样才能改变这种行为并保持流行手势?
The problem is that, UINavigationBar slides away instead of stay of his place together with whole MainViewController. How can I change that behavior and keep pop gesture?
推荐答案
在你的 MainViewController
添加那个方法
in your MainViewController
add that method
override func viewDidAppear(_ animated: Bool) {
UIView.animate(withDuration: 0) {
self.navigationController?.setNavigationBarHidden(false, animated: false)
}
}
并在 DetailViewController
中用下面的方法替换你的方法
and replace your method with below method in DetailViewController
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
}
这篇关于UINavigationBar 滑开而不是停留在原地的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!