#import "LyonNavigationController.h"
@interface LyonNavigationController ()<UIGestureRecognizerDelegate>
@end
@implementation LyonNavigationController
// BUG:(实现自定义返回按钮覆盖掉系统按钮 要求还原导航栏自带的滑动返回手势功能)
// 如果单单在viewDidLoad方法中设置
// self.interactivePopGestureRecognizer.delegate = nil;
// 虽然还原了滑动手势,但是存在根控制器的也有滑动手势的bug
// 解决方法:
// 在viewDidLoad方法中
// 1. 将系统自带滑动手势代理赋给变量
// self.temDelegate = self.interactivePopGestureRecognizer.delegate;
// 2.设置navigationcontroller的代理方法
// self.delegate = self;
// 3.在push代理方法中还原滑动手势
// self.interactivePopGestureRecognizer.delegate = nil;
// 4.设置navigationcontroller的代理方法,在didshow为根控制器的时候设置返回手势失效
// self.interactivePopGestureRecognizer.delegate = self.temDelegate;
- (void)viewDidLoad {
[super viewDidLoad];
// 防止手势冲突
self.interactivePopGestureRecognizer.enabled = NO;
// handleNavigationTransition: 为系统手势触发方法
// 1. NSLog(@"%@",self.interactivePopGestureRecogniz);滑动的手势
// 2. 输出代理,获取handleNavigationTransition:方法
// 可通过运行时(RunTime.h)获取手势方法属性列表
// 通过_target属性使用 kvc 获取target对象
// 1. 由于target 等于 self.interactivePopGestureRecognizer.delegate
// 2. 所以本文使用 self.interactivePopGestureRecognizer.delegate
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
// 被夹在这中间的代码针对于此警告都会无视并且不显示出来
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self.interactivePopGestureRecognizer.delegate action:@selector(handleNavigationTransition:)];
#pragma clang diagnostic pop
pan.delegate = self;
[self.view addGestureRecognizer:pan];
}
#pragma mark - 手势代理方法
// 是否开始触发手势
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
// 判断下当前控制器是否是跟控制器
return (self.topViewController != [self.viewControllers firstObject]);
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (self.viewControllers.count != 0) {
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:animated];
}
@end
iOS应用开发 - 导航栏系统边缘侧滑返回更改为全屏侧滑
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 关于全屏侧滑的效果可以参考《8行代码教你搞定导航控制器全屏滑动返回效果》上面说的很详细,我实现的监听侧滑偏移量就是...
- 其实只需在导航栏控制器中加入下面这句代码就OK了 self.navigationController.intera...
- 做了好几个项目,其中包括公司和个人项目。基本都是导航栏需要加入特效处理(比如侧滑渐变、上下滑渐变、高斯模糊...