解决 iOS 导航栏隐藏和显示
今天在项目中遇到了隐藏 navigationbar
功能的问题,例如:从 A push到 B 页面,A 页面的 navigationbar
是隐藏的,但是 B 页面的 navigationbar
是需要显示的。
一开始我在 A 页面调用 setNavigationBarHidden(true, animated: true)
方法,在 B 页面调用 setNavigationBarHidden(false, animated: true)
方法,虽然能够达到想要的效果,但是对于项目来说是灾难性的。因为如果有多个地方出现这种情况的话,你的代码将会变得十分的杂乱臃肿。
一种好的解决方式是调用 navigationcontroller
的代理:
1 | navigationController(_:willShow:animated:) |
将这个代理放在项目控制器的基类中,在这里我是放在我的基类 BaseViewController
中。为什么这么做?因为这样可以很好的去掉冗余的代码,不用写的到处都是,我的所有控制器都是继承自 BaseViewController
的,BaseViewController
继承自 UIViewController
。
下面到了 Show Code 的时候了
基类实现代理方法
1 | extension BaseViewController: UINavigationControllerDelegate { |
在需要隐藏 navigationbar 的地方,添加如下代码
1 | self.navigationController?.delegate = self |
这样就能解决显示/隐藏的问题了。
参考链接
- iOS 开发 完美解决navigationBar隐藏/显示