前言
- 什么是侧滑?
侧滑
本身是系统自带的,但是是左边缘触发
的侧滑;
- 是什么
导致
了 自带
的实现 不起作用
的?原因有:
(1)隐藏了系统右上角返回的按钮
,系统会自动关掉左滑返回的功能;
(2)禁用侧滑功能
;
(3)自定义返回键或者导航栏
后,侧滑失灵;
- 怎么解决?
- 使用
FDFullscreenPopGesture
可以解决
一个支持 全屏侧
滑的 UINavigationController
的类目。
FDFullscreenPopGesture
的这个类目:UINavigation+FDFullscreenPopGesture
,扩展了iOS7+的侧滑返回功能。取代从左边缘滑起的是,我们可以从屏幕的任意位置滑动,并且伴随着返回上个界面的过渡动画也可以正常流畅。
主要功能
自动支持全屏侧滑
禁用导航/控制器的侧滑功能
源码解读
- 在
UINavigationController
的分类 UINavigationController + FDFullscreenPopGesture
中,暴露给用户的属性有:
1 2 3 4 5 6 7 8 9
| @interface UINavigationController (FDFullscreenPopGesture)
// 这个滑动手势,处理用户的侧滑弹出操作 @property (nonatomic, strong, readonly) UIPanGestureRecognizer *fd_fullscreenPopGestureRecognizer;
// 判断fd_viewControllerBasedNavigationBarAppearanceEnabled属性,视图控制器可以自己控制,而不是全局的方式控制,导航栏的外观。,默认是YES。 @property (nonatomic, assign) BOOL fd_viewControllerBasedNavigationBarAppearanceEnabled;
@end
|
- 在
UIViewController
的分类 UIViewController + FDFullscreenPopGesture
中,允许视图控制器禁用用户弹出手势,比如某些情况下,视图控制器需要自己处理滑动手势。其中,暴露给用户的属性有
1 2 3 4 5 6
| // 当处于导航控制栈中时,是否禁用用户弹出手势; @property (nonatomic, assign) BOOL fd_interactivePopDisabled;
// 通过检查基于导航栏的视图控制器是否可用,来指明视图控制器的导航栏隐藏与否。默认是NO,一般导航栏是展示的。 @property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;
|
基本使用
具体集成过程就不再讲解,如果有不知道的,看我 iOS-OC三方库01:SDCycleScrollView基本使用 集成过程,下面来看看具体使用:
- 把这个框架的
.h
文件添加到 全局的宏
中,所有的 导航控制器
都将 自动会支持全屏侧滑
。
1 2
| // FDFullscreenPopGesture(全屏侧滑) #import <UINavigationController+FDFullscreenPopGesture.h>
|
- 禁用手势
1
| self.navigationController.fd_fullscreenPopGestureRecognizer.enabled = NO;
|
使用过程遇到的问题
- 键盘弹出时,此时手势侧滑,会出现
导航
和 控制器
分离
解决办法:在视图已经出现时 弹出键盘
,在视图将要消失时 收起键盘
1 2 3 4 5 6 7 8 9 10 11 12
| #pragma mark - 防止键盘影响手势侧滑pop - (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; NSLog(@"视图将要消失"); [self.codeV.bottomTF resignFirstResponder]; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSLog(@"视图已经出现"); // 弹出键盘 [self.codeV.bottomTF becomeFirstResponder]; }
|