跳转过去的时候导航栏还是在的
let testVC = TestViewController()
testVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(testVC, animated: true)
但是这样就需要每个跳转都要写一次就很麻烦
把这个方法截获到 当导航栏发生push的时候对目标控制器隐藏tabbar
XMGNavigationController是项目中的导航栏所以设置root的时候用的导航栏是这个类
- swift 简化版
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
viewController.hidesBottomBarWhenPushed = true
super.pushViewController(viewController, animated: animated)
}
- OC(这个是我项目中的OC的导航栏的写法)
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
// 隐藏TabBar
if (self.childViewControllers.count > 0) {
viewController.hidesBottomBarWhenPushed = YES;
//解决push多个控制器后,popToRootViewController Tabbar消失的问题 ios14出现的问题
if (self.childViewControllers.count > 1) {
viewController.hidesBottomBarWhenPushed = NO;
}
}
[super pushViewController:viewController animated:animated];
}
- 假如我们要跳转的控制器需要自定义的导航栏需要隐藏导航栏
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: true)
}
//控制器小时候的时候要重新设置为显示不然会影响其他的地方
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: true)
}
这样就不能跳转回去了只能加按钮了但是我想用手势
注意这里这个导航栏一定要用这个类你才能在自己写的导航栏控制器类中改代码
用手势可以pop回去
override func viewDidLoad() {
super.viewDidLoad()
// 1.使用运行时, 打印手势中所有属性
guard let targets = interactivePopGestureRecognizer!.value(forKey: "_targets") as? [NSObject] else { return }
let targetObjc = targets[0]
let target = targetObjc.value(forKey: "target")
let action = Selector(("handleNavigationTransition:"))
let panGes = UIPanGestureRecognizer(target: target, action: action)
view.addGestureRecognizer(panGes)
}
- interactivePopGestureRecognizer 这个是导航栏自带的手势,它的范围不是很大就是左边一点点
- 获取到这个手势的targt 和 action 然后把这两个东西给新加的手势中这样新加的手势就有了这个功能了
- 然后把手势加到View上