下面的代码隐藏并显示了导航栏。它在第一个视图加载时被隐藏,然后在“子”被调用时被隐藏。问题是,当他们回到根视图....时,我找不到触发它再次隐藏的事件/动作
我在根页面上有一个“测试”按钮,手动执行操作,但它并不漂亮,我希望它是自动的。
-(void)hideBar
{
self.navController.navigationBarHidden = YES;
}
-(void)showBar
{
self.navController.navigationBarHidden = NO;
}
通过在你的ViewController中实现这个代码,你可以得到这个效果
实际上窍门是,当控制器被启动时隐藏navigationBar
- (void)viewWillAppear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:YES animated:YES];
[super viewWillAppear:animated];
}
并在用户离开该页面时取消隐藏导航栏,这是viewWillDisappear
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController setNavigationBarHidden:NO animated:YES];
[super viewWillDisappear:animated];
}
我相信@chad-m的回答。
以下是Swift版本:
创建一个新文件MyNavigationController.swift
import UIKit
class MyNavigationController: UINavigationController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.delegate = self
}
func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
if viewController == self.viewControllers.first {
self.setNavigationBarHidden(true, animated: animated)
} else {
self.setNavigationBarHidden(false, animated: animated)
}
}
}
在StoryBoard中将UINavigationController的类设置为MyNavigationController
就是这样!
chad-m的回答和我的不同之处在于:
继承自UINavigationController,所以你不会污染你的rootViewController。
使用self.viewControllers.first而不是homeViewController,这样你就不会为你的100个UINavigationControllers在一个StoryBoard中做100次。