IQKeyboardManager使用导致UINavigationController导航控制器移位异常
来源:互联网 发布:2017淘宝购物节 编辑:程序博客网 时间:2024/05/17 17:55
IQKeyboardManager组件的使用方便了多个编辑控件的切换。但在使用中,也有个问题,那就是会导致UINavigationController移
位,而后通过设置"self.view = [[UIScrollView alloc] initWithFrame:self.view.bounds];"可以解决该问题。但不知道从哪个版本开始
(反正现在我是用最新的4.0.8版本),这种设置解决方法也行不通了,依然会导致UINavigationController的移位。
使用效果图(UINavigationController移位)
为了解决这个问题,可以有两套方案
方案1 使用原来的低版本。如3.2.0.3
(1)修改IQKeyboardManager的版本号
platform :ios, '8.0'target:DemoIQKeyboard do#pod 'IQKeyboardManager', '~> 4.0.8'pod 'IQKeyboardManager', '~> 3.2.0.3'end(2)设置有编辑控制页面的类型为UIScrollView
- (void)loadView{ [super loadView]; self.view = [[UIScrollView alloc] initWithFrame:self.view.bounds];}方案1使用低版本虽然不能使用到新版本的相关特性,但对于修正UINavigationController移位还是挺好的。
使用效果图(方案1修正后)
方案2 继续使用最新版本,同时修改源码
(1)有编辑的页面,设置其该页面为UIScrollView类型。如视图控制器的view
- (void)loadView{ [super loadView]; self.view = [[UIScrollView alloc] initWithFrame:self.view.bounds];}
(2)修改IQKeyboardManager中IQUIWindow+Hierarchy.m文件中的方法"- (UIViewController*)topMostController"
- (UIViewController*)topMostController{ // 原代码// UIViewController *topController = [self rootViewController];// // // Getting topMost ViewController// while ([topController presentedViewController])topController = [topController presentedViewController];//// // Returning topMost ViewController// return topController; // 修改后代码 UIViewController *topController = [self rootViewController]; if ([topController isKindOfClass:[UITabBarController class]]) { UITabBarController *tabbarController = (UITabBarController *)topController; topController = tabbarController.selectedViewController; if ([topController isKindOfClass:[UINavigationController class]]) { UINavigationController *navController = (UINavigationController *)topController; topController = navController.visibleViewController; } } // Getting topMost ViewController while ([topController presentedViewController]) { topController = [topController presentedViewController]; } // Returning topMost ViewController return topController;}
方案2虽然修正了UINavigationController不会移位,但是还有一个小缺陷,即首次进入编辑状态的编辑控件,且该控件被键盘遮挡时不会立马响应显示在键盘之上,而是需要通过点击键盘上的切换按钮后才会显示在键盘之上。
使用效果图(方案2修正后)
0 0
- IQKeyboardManager使用导致UINavigationController导航控制器移位异常
- 导航控制器UINavigationController的简单使用
- UI:导航控制器UINavigationController的使用
- iOS中导航控制器的使用 UINavigationController
- 导航视图控制器UINavigationController
- 导航控制器 ( UINavigationController )
- 导航控制器UINavigationController
- UINavigationController导航控制器详解
- UINavigationController导航控制器…
- UINavigationController导航控制器…
- UINavigationController导航控制器…
- UINavigationController 导航控制器
- 导航控制器UINavigationController
- 导航控制器:UINavigationController
- 自定义UINavigationController(导航控制器)
- swift UINavigationController 导航控制器
- UINavigationController 导航视图控制器
- UINavigationController 导航控制器
- 浅谈spring框架(二)
- 感悟或编程口诀
- Vue学习(day3)
- Java反射机制的使用
- equals()方法的重写
- IQKeyboardManager使用导致UINavigationController导航控制器移位异常
- 程序计数器 寄存器
- quartz任务调度框架入门
- Laravel和composer新手安装时的问题
- Windows系统-右键菜单执行操作
- QMUI / QMUI_iOS框架学习(四)
- 第一天:认识CPLEX
- NFS网络文件系统及其配置
- 新版blast+的使用简介