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

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

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

//获取键盘的高度
/*
iphone 6:
中文
2014-12-31 11:16:23.643 Demo[686:41289] 键盘高度是 258
2014-12-31 11:16:23.644 Demo[686:41289] 键盘宽度是 375
英文
2014-12-31 11:55:21.417 Demo[1102:58972] 键盘高度是 216
2014-12-31 11:55:21.417 Demo[1102:58972] 键盘宽度是 375 iphone 6 plus:
英文:
2014-12-31 11:31:14.669 Demo[928:50593] 键盘高度是 226
2014-12-31 11:31:14.669 Demo[928:50593] 键盘宽度是 414
中文:
2015-01-07 09:22:49.438 Demo[622:14908] 键盘高度是 271
2015-01-07 09:22:49.439 Demo[622:14908] 键盘宽度是 414 iPhone 7
2016-11-13 17:44:48.315 LoginDemo[2431:120937] 键盘高度是 258
2016-11-13 17:44:48.316 LoginDemo[2431:120937] 键盘宽度是 375 iPhone 7 Plus
2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘高度是 271
2016-11-13 17:43:20.683 LoginDemo[2322:119257] 键盘宽度是 414 iphone 5 :
2014-12-31 11:19:36.452 Demo[755:43233] 键盘高度是 216
2014-12-31 11:19:36.452 Demo[755:43233] 键盘宽度是 320 ipad Air:
2014-12-31 11:28:32.178 Demo[851:48085] 键盘高度是 264
2014-12-31 11:28:32.178 Demo[851:48085] 键盘宽度是 768 ipad2 :
2014-12-31 11:33:57.258 Demo[1014:53043] 键盘高度是 264
2014-12-31 11:33:57.258 Demo[1014:53043] 键盘宽度是 768
*/

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

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

//增加监听,当键盘出现或改变时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil]; //增加监听,当键退出时收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];

显示键盘的代码:

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

隐藏键盘的高度:

//当键盘隐藏的时候
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
//do something
}

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

-(void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

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

比如:

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

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. (转)EasyUI-datagrid-自动合并单元格

    1.目标 1.1表格初始化完成后,已经自动合并好需要合并的行: 1.2当点击字段排序后,重新进行合并: 2.实现 2.1 引入插件 /** * author ____′↘夏悸 * create dat ...

  2. SVN搭建简单教程

    一.引言 笔者曾经试图在网上搜索一篇关于SVN源代码服务器搭建方面的中文技术文章,可惜,所找到的,要么是不完整,要么就是对笔者没什么帮助的文章,TortoiseSvn的帮助文档固然强大,但因为是英文, ...

  3. ueditor 1.4.3 gbk asp 上传中文乱码 终极解决方法 ie6 ie8 也适用

    [摘要:百度编纂器1.43 gbk asp 题目 1.firefox3.0下 单图上传 面没有了 面多图上传 中央的蓝色按钮(即 面击挑选图片)没有表现(附件上传出那个题目) 没有晓得我的水狐吃翔了 ...

  4. canvas的save与restore方法的作用

    网上搜罗了一堆资料,最后总结一下. save:用来保存Canvas的状态.save之后,可以调用Canvas的平移.放缩.旋转.错切.裁剪等操作. restore:用来恢复Canvas之前保存的状态. ...

  5. Virus.Win32.Virlock.b分析

    0x00 样本说明 分析样本是被0b500d25f645c0b25532c1e3c9741667的样本感染得到.感染前的文件是Tcpview.exe,一款windows网络连接查看工具. 感染前后文件 ...

  6. HTML5存储之 indexedDB

    IndexeDB是HTML5 重要的一部分,它是一种轻量级的NOSQL数据库.对创建具有丰富本地存储数据的数据密集型的离线HTML5 Web 应用程序很有用. IndexedDB是为了能够在客户端存储 ...

  7. HBase 基本shell命令

  8. Qt - 错误总结 - 在自定义类头文件中添加Q_OBJECT 编译时报错(undefined reference to ‘vtable for xxThread)

    错误提示:在添加的QThread子类头文件添加Q_OBJECT时,编译程序,出现"undefined reference to 'vtable for xxThread'"错误提示 ...

  9. $_SERVER 详情

    $_SERVER['HTTP_ACCEPT_LANGUAGE']//浏览器语言 $_SERVER['REMOTE_ADDR'] //当前用户 IP . $_SERVER['REMOTE_HOST'] ...

  10. 一些有趣的Javascript技巧

    整理一些刷题时学会的小技巧…… 目录: 即大于0又小于0的变量 String.split() 与 正则表达式 缓存的几种方法 初始化一个数组 即大于0又小于0的变量 问题: 设计一个变量val,使得以 ...