iOS小技能:解决IQKeyboardManager 导致TableView 上移问题​

简介: iOS小技能:解决IQKeyboardManager 导致TableView 上移问题​

引言

场景:

  1. 使用IQKeyboardManager 键盘管理工具,布局采用Masonry
  2. 在cell上使用UITextView
  3. textV的父控件在willMoveToWindow让textV 获取焦点导致

image.png

  • 问题:键盘隐藏之后,UITableView 界面整体上移问题
  • 解决方案

不要在willMoveToWindow让textV 获取焦点(推荐)

I 原因分析

  • textV的父控件在willMoveToWindow让textV 获取焦点导致IQKeyboardManager是TableView 界面上移
- (void)willMoveToWindow:(UIWindow *)newWindow{
    [super willMoveToWindow:newWindow];
    if(self.tvModel.isDont_becomeFirstResponder){
    }else{
        [self.textV becomeFirstResponder];
    }
}

II 解决使UITableView 界面上移问题

解决方案1: 不要在willMoveToWindow让textV 获取焦点(推荐

因为textV的父控件在willMoveToWindow让textV 获取焦点导致IQKeyboardManager是TableView 界面上移

如果需要进入视图becomeFirstResponder时,可等视图显示完毕之后,手动调用

- (void)becomeFirstResponder{
    [self.textF becomeFirstResponder];
}

解决方案2: 禁止键盘出现时的界面滚动

#pragma mark - ******** 禁止键盘出现时的界面滚动
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [IQKeyboardManager sharedManager].enable = YES;
}
- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [HWNavigationController setupDetailnavigationItemAndBarStyle:self];
    [IQKeyboardManager sharedManager].enable = NO;
}

解决方案3: 置位View的transform

  • 键盘隐藏的时候,恢复视图上移的高度
- (void)viewDidLoad {
    [super viewDidLoad];
   //
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];
    self.title = @"风险处理";
    [self vcView];
//
}
- (void)dealloc{
//[self.netReachability stopNotifier];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)keyboardDidHide: (NSNotification *) notification{
    NSLog(@"%@",notification.userInfo);
     CGFloat keyBoardAnimationDuration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [self.view.window setBackgroundColor:self.vcView.tableView.backgroundColor];
    // 解决
  CGFloat  y = [[UIApplication sharedApplication] statusBarFrame].size.height + self.navigationController.navigationBar.frame.size.height;// navigationBarAreaHeight
//————————————————
//版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/z929118967/article/details/104639264
    [UIView animateWithDuration:keyBoardAnimationDuration animations:^{
        [self.view setTransform:CGAffineTransformMakeTranslation(0, y)];//设置平移的x、y值
    }];
//    self.view.transform = CGAffineTransformIdentity;//对设置量进行还原
}

see also


目录
相关文章
|
JSON JavaScript 前端开发
iOS小技能: 开发 uni-app 原生插件(支持iOS Extension)
术语:uni原生插件指的是将`原生开发的功能按照规范封装成插件包`,然后即可在 uni-app 前端项目中通过js调用原生能力。
1149 0
iOS小技能: 开发 uni-app 原生插件(支持iOS Extension)
|
文字识别 API iOS开发
iOS小技能:iOS13 证件扫描 & 文字识别API
1. 应用场景:证件扫描、文字识别 2. 原理:利用iOS13 VNDocumentCameraViewController的证件扫描和VNRecognizeTextRequest文字识别功能进行实现
406 0
iOS小技能:iOS13 证件扫描 & 文字识别API
iOS15 tableView顶部空白解决办法
iOS15 tableView顶部空白解决办法
118 0
|
开发工具 iOS开发 git
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
218 0
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
|
安全 iOS开发
iOS小技能:下拉刷新控件的适配
1. 下拉顶部背景色设置: 往tableView的父控件添加拉伸背景视图 2. present 半屏适配 iOS13 modalPresentationStyle属性默认不是全屏样式`UIModalPresentationFullScreen`,而是半屏样式,需要根据需求手动设置。 present 半屏,会导致列表下拉刷新失效。
209 0
iOS小技能:下拉刷新控件的适配
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
203 0
iOS小技能:lldb打印block参数签名
|
JSON JavaScript 前端开发
iOS小技能: 开发 uni 原生插件(支持iOS Extension)
背景:app采用uni实现 需求: iOS App前台后台离线(杀死情况下)推送语音播报(到账xx元、收款播报、自定义推送铃)。 实现方式:uni-app 原生插件(支持iOS Extension)
484 0
iOS小技能: 开发 uni 原生插件(支持iOS Extension)
|
安全 iOS开发 开发者
iOS小技能:重签名、打包脚本
重签名需求:改变了应用的二进制文件,或者增加、修改了应用里面的资源,应用本身的签名就会被破坏。
270 0
iOS小技能:重签名、打包脚本
|
IDE Unix 编译器
iOS小技能:Makefile的使用(Makefile的规则、部署脚本、config管理ssh连接)
make是一个命令工具,是一个解释makefile中指令的命令工具。其本质是**文件依赖**,Makefile文件制定编译和链接所涉及的文件、框架、库等信息,将整个过程自动化。
397 0
|
编解码 自然语言处理 API
iOS小技能:通讯录
iOS处理语言工具CFStringTransform : 智能地处理用户的输入内容,经典应用场景【索引】
113 0