隐藏导航条之后的push处理
缘由
使用ViewController内部调用NavigationViewController的API
[self.navigationController setNavigationBarHidden:YES animated:YES];
的时候,在界面跳转之间,导航条会出现一下
主要是在NavigationViewController
处理
-
自定义
NavigationViewController
,如ZHMainNavigationViewController
,遵守
UIGestureRecognizerDelegate,UINavigationControllerDelegate
协议@interface ZHMainNavigationViewController ()<UIGestureRecognizerDelegate,UINavigationControllerDelegate> @end
-
自定义一个隐藏导航条的协议
ZHHiddenNavbar
@protocol ZHHiddenNavbar <NSObject> @end
-
实现如下方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController <UIGestureRecognizerDelegate>*)viewController animated:(BOOL)animated { //如果控制器遵守了ZHHiddenNavbar协议,则需要隐藏导航栏 BOOL noNav = [[viewController class] conformsToProtocol:@protocol(ZHHiddenNavbar)]; if (noNav) { //隐藏导航栏后会导致边缘右滑返回的手势失效,需要重新设置一下这个代理 self.interactivePopGestureRecognizer.delegate = viewController; } //设置控制器是否要隐藏导航栏 [self setNavigationBarHidden:noNav animated:YES]; }
-
应用
让想要隐藏导航条的控制器遵守ZHHiddenNavbar
协议即可/// 英雄榜 @interface ZHTikuBrushPlanRankViewController : UIViewController<ZHHiddenNavbar> @end