项目中用到了JXCategoryView并且需要侧滑手势,在VC中用到了self.interactivePopGestureRecognizer.delegate = self;唤起手势,但是出现溜冰bug[侧滑之后 松手自动划过去]
解决方案是:
在TPNavigationController的push方法中,增加判断即可
if([self respondsToSelector:@selector(interactivePopGestureRecognizer)]){
self.interactivePopGestureRecognizer.enabled = YES;
self.interactivePopGestureRecognizer.delegate = nil;
}
完整为:
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (self.childViewControllers.count >0) {
viewController.hidesBottomBarWhenPushed = YES;
}
if([self respondsToSelector:@selector(interactivePopGestureRecognizer)]){
self.interactivePopGestureRecognizer.enabled = YES;
self.interactivePopGestureRecognizer.delegate = nil;
}
[super pushViewController:viewController animated:animated];
}
补充内容:
自定义的导航栏如果不相应侧滑手势,严谨做法为:
在viewDidAppear中添加代理,在viewWillDisappear中将代理置为nil,负责就会出现连续返回或者侧滑溜冰等混乱场景
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// 侧滑手势代理设置
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// 侧滑手势代理关闭【否则不置为nil会出现连环返回】
if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.navigationController.interactivePopGestureRecognizer.delegate = nil;
}
}