由于项目中使用FDFullscreenPopGesture框架,实现滑动返回功能。
在需要隐藏导航栏的控制器viewWillAppear方法中使用下面代码隐藏导航栏会出现问题
[self.navigationController setNavigationBarHidden:YES animated:NO];
从有NavigationBar到无NavigationBar,手势返回的时候,有NavigationBar的控制器导航栏会变成白色,或者消失不见了;
于是加上动画效果,问题解决,但页面会有明显上移的动画
[self.navigationController setNavigationBarHidden:YES animated:YES];
解决办法:使用FDFullscreenPopGesture框架的fd_interactivePopDisabled属性设置,隐藏导航栏
- (void)viewDidLoad
{
[super viewDidLoad];
self.fd_prefersNavigationBarHidden = NO;
}
并且如果是控制器作为导航控制器的根控制器,需要在viewWillAppear:和viewWillDisappear:方法里面添加对是否隐藏NavigationBar的判断;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(CGFLOAT_MIN * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
UIViewController *vc = [self.navigationController.viewControllers lastObject];
if (vc.fd_prefersNavigationBarHidden) {
[self.navigationController setNavigationBarHidden:YES animated:NO];
} else {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
});
这样可以实现无NavigationBar控制器没有上移动画,并且从有NavigationBar到无NavigationBar正常滑动返回的功能。