原文连接:http://guohuaden.com/2017/04/30/get-keyboard-height/

我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框。

但实现时你会发现,在不同的手机上键盘的高度是不同的。这里列举一下:

  1. //获取键盘的高度
  2. /*
  3. iphone 6:
  4. 中文
  5. 2014-12-31 11:16:23.643 Demo[686:41289] 键盘高度是 258
  6. 2014-12-31 11:16:23.644 Demo[686:41289] 键盘宽度是 375
  7. 英文
  8. 2014-12-31 11:55:21.417 Demo[1102:58972] 键盘高度是 216
  9. 2014-12-31 11:55:21.417 Demo[1102:58972] 键盘宽度是 375
  10.  
  11. iphone 6 plus:
  12. 英文:
  13. 2014-12-31 11:31:14.669 Demo[928:50593] 键盘高度是 226
  14. 2014-12-31 11:31:14.669 Demo[928:50593] 键盘宽度是 414
  15. 中文:
  16. 2015-01-07 09:22:49.438 Demo[622:14908] 键盘高度是 271
  17. 2015-01-07 09:22:49.439 Demo[622:14908] 键盘宽度是 414
  18.  
  19. iPhone 7
  20. 2016-11-13 17:44:48.315 LoginDemo[2431:120937] 键盘高度是 258
  21. 2016-11-13 17:44:48.316 LoginDemo[2431:120937] 键盘宽度是 375
  22.  
  23. iPhone 7 Plus
  24. 2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘高度是 271
  25. 2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘宽度是 414
  26.  
  27. iphone 5 :
  28. 2014-12-31 11:19:36.452 Demo[755:43233] 键盘高度是 216
  29. 2014-12-31 11:19:36.452 Demo[755:43233] 键盘宽度是 320
  30.  
  31. ipad Air:
  32. 2014-12-31 11:28:32.178 Demo[851:48085] 键盘高度是 264
  33. 2014-12-31 11:28:32.178 Demo[851:48085] 键盘宽度是 768
  34.  
  35. ipad2 :
  36. 2014-12-31 11:33:57.258 Demo[1014:53043] 键盘高度是 264
  37. 2014-12-31 11:33:57.258 Demo[1014:53043] 键盘宽度是 768
  38. */

我们看出不同的手机设备键盘的高度是不同的,而且英文和中文键盘的高度也是不一样的。

下面我们说一下利用通知来获取键盘的高度:

  1. //增加监听,当键盘出现或改变时收出消息
  2. [[NSNotificationCenter defaultCenter] addObserver:self
  3. selector:@selector(keyboardWillShow:)
  4. name:UIKeyboardWillShowNotification
  5. object:nil];
  6.  
  7. //增加监听,当键退出时收出消息
  8. [[NSNotificationCenter defaultCenter] addObserver:self
  9. selector:@selector(keyboardWillHide:)
  10. name:UIKeyboardWillHideNotification
  11. object:nil];

显示键盘的代码:

  1. - (void)keyboardWillShow:(NSNotification *)aNotification
  2. {
  3. //获取键盘的高度
  4. NSDictionary *userInfo = [aNotification userInfo];
  5. NSValue *aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
  6. CGRect keyboardRect = [aValue CGRectValue];
  7. int height = keyboardRect.size.height;
  8. int width = keyboardRect.size.width;
  9. NSLog(@"键盘高度是 %d",height);
  10. NSLog(@"键盘宽度是 %d",width);
  11. }

隐藏键盘的高度:

  1. //当键盘隐藏的时候
  2. - (void)keyboardWillBeHidden:(NSNotification*)aNotification
  3. {
  4. //do something
  5. }

当然在注册通知(NSNotificationCenter)后,记得最后的注销通知:

  1. -(void)viewWillDisappear:(BOOL)animated
  2. {
  3. [[NSNotificationCenter defaultCenter] removeObserver:self];
  4. }

注意⚠️:切换键盘时也会产生UIKeyboardWillShowNotification,所以很可能方法被调用多次。最好在keyboardWillShow中不要写与调用次数有关的代码。在键盘第一次产生时,如果不是默认的英文键盘也会调用多次方法。

比如:

  1. #pragma mark - ******************打开键盘********
  2. - (void) keyboardWillShowOfFeedBackVC:(NSNotification *)notify {
  3.  
  4. //这样写是不正确的:因为切换中英文键盘时都会调用该方法。
  5. // CGRect frame = self.view.frame;
  6. // frame.origin.y = self.view.frame.origin.y - 64;
  7. // self.view.frame = frame;
  8.  
  9. self.view.frame = CGRectMake(, -, IPHONE_WIDTH, IPHONE_HEIGHT);
  10.  
  11. }

iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项的更多相关文章

  1. 【iOS】swift-通过JS获取webView的高度

     let webHeightStr = webView.stringByEvaluatingJavaScriptFromString("document.body.scrollHeight& ...

  2. Android获取屏幕实际高度跟显示高度,判断Android设备是否拥有虚拟功能键

    //获取屏幕尺寸,不包括虚拟功能高度 getWindowManager().getDefaultDisplay().getHeight(); 获取屏幕原始尺寸高度,包括虚拟功能键高度, private ...

  3. 安卓(Android )软键盘的控制(显示和隐藏)

    Activity 启动时软键盘默认状态 在清单文件(manifest .xml)中可以通过在 Activity 标签中增加属性控制软键盘的默认状态: android:windowSoftInputMo ...

  4. 利用jquery 实现菜单控制对应视图的显示与隐藏

    效果: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta ...

  5. iOS Xib布局某些控件显示或隐藏<约束的修改>

    对于这个问题使用Masonry是很好解决的. 注意:绿色的是label2,当indexpath.section % 2 == 0时,label2不存在. 关键代码如下: if (indexPath.s ...

  6. iOS隐藏键盘的几种方式

    因为开发中经常要用到textField和textView,在某些情形下隐藏键盘很有必要,而隐藏键盘有多种方式,在合适的场景下用合适的方式隐藏就显得很重要,我也老是记不起来有哪些方法,这里就记录一下,以 ...

  7. android 软键盘的显示与隐藏问题的研究

    在android中,常常会和输入法的软件键盘交互.在Manifest文件中,系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式. 该属性提供了Activit ...

  8. Android 平板中 自己定义键盘(popuwindow) 居于屏幕左下方 仿微信的password输入界面

          之前博客中,介绍过使用谷歌提供的键盘的一些api,能够非常好地自己定义键盘,參考我之前的博客链接:android 自己定义键盘 ,这个有一个局限性,仅仅能占满屏幕,无法做到仅仅能占一部分的 ...

  9. [iOS]利用通知实现监听系统键盘

    // // ViewController.m // text // // Created by 李东旭 on 16/1/22. // Copyright © 2016年 李东旭. All rights ...

随机推荐

  1. (转载)GDI+双缓冲

    双缓冲在GDI+里可以有效的提高描画效率.改善显示的质量. 下面的代码是一个最简单的双缓冲的模板.可以根据需要,做简单的修改即可. Bitmap CacheImage( [Width], [Heigh ...

  2. 谈谈__proto__和prototype的区别

    我想javascript中的原型链一直想很多初学javascript的同学感到非常的困惑,今天看了一些文章,结合自己的理解,把原型链这个东西从新来整理一下,如有不对之处,望大家帮忙指出. 首先,我们应 ...

  3. sqlserver 2005 数据误删恢复

    今天同事不小心将一个很重要的数据表中的数据删除了,找了很多人都没办法恢复.我在网上搜索了一下资料,发现有一个方法可以一试,具体如下 http://www.knowsky.com/616730.html ...

  4. cookie (储存在用户本地终端上的数据)

    Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份.进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).定义于 RFC2109 和 2965 中的都已废弃 ...

  5. Sality.m分析

    Sality.m分析 0x1.样本概述 FILE_A MD5:1C9A0E01C6033801AFC5A12DE1CC5BDC FILE_B MD5:4B6B70F4A199CF3EAC1554B08 ...

  6. 页面滚动到底部自动 Ajax 获取文章

    页面滚动到底部自动 Ajax 获取文章  代码如下 复制代码 var _timer = {};function delay_till_last(id, fn, wait) {    if (_time ...

  7. C#基础:LINQ 查询函数整理

    1.LINQ 函数   1.1.查询结果过滤 :where() Enumerable.Where() 是LINQ 中使用最多的函数,大多数都要针对集合对象进行过滤,因此Where()在LINQ 的操作 ...

  8. SPOJ FTOUR2 - Free tour II

    Description 有些黑点,问你选择不超过 \(k\) 个黑点的路径,路径权值最大是多少. Sol 点分治. 这是qzc的论文题,不过我感觉他的翻译好强啊...我还是选择了自己去看题目... 点 ...

  9. 上个项目的一些反思 III

    离线缓存 之前的项目因为实时性要求比较高,所以一打开客户端,就开始做网络请求.现在想想,是没有做内容的离线缓存.这个问题,我没意识到.产品经理也没有意识到... 我觉得Archiver,来做比较合适, ...

  10. PHP 文件下载 显示进度条

    前台调用:js调用: function downloadfile(id,name,price,curcount_pricelimit){ Date.prototype.Format = functio ...