ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)
背景:
ios5之前,iphone上的键盘的高度是固定为216.0px高的,中文汉字的选择框是悬浮的,所以不少应用都将此高度来标注键盘的高度(包括米聊也是这么做的)。
可是在ios5中,键盘布局变了,尤其是中文输入时,中文汉字选择框就固定在键盘上方,这样就使得原本与键盘紧密贴合的界面视图被中文汉字选择框给覆盖住了。一方面影响了界面的美观,另一方面,如果被覆盖的部分就是文本输入框的话,用户就无法看到输入的内容了。因此这个问题就必须得解决了。
解决方法:
其实在一开始使用216.0px这个固定值来标注键盘的高度就是错误的。因为在ios3.2以后的系统中,苹果就提供了键盘使用的api以及demo程序——“KeyboardAccessory”。
处理键盘事件的正确方法是这样的:(包括获取键盘的高度以及键盘弹出和消失动画的时间)
1)在要使用键盘的视图控制器中,接收键盘事件的通知:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; // 键盘高度变化通知,ios5.0新增的 #ifdef __IPHONE_5_0float version = [[[UIDevice currentDevice] systemVersion] floatValue];if (version >= 5.0) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillChangeFrameNotification object:nil]; }#endif
2)然后添加键盘事件的处理代码:
获取到当前keyboard的高度以及动画时间,然后对视图进行对应的操作即可。
#pragma mark -#pragma mark Responding to keyboard events- (void)keyboardWillShow:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
CGRect keyboardRect = [aValue CGRectValue];
//DLog(@"keyboard height %f", CGRectGetHeight(keyboardRect));
[UIView animateWithDuration:.25f
animations:^{
self.inputContainerView.frame = CGRectMake(0
, CGRectGetHeight([UIScreen mainScreen].bounds) - CGRectGetHeight(keyboardRect)
- 160 /*- NAVBAR_HEIGHT*/
, 320, 300);
}
completion:nil];
} - (void)keyboardWillHide:(NSNotification *)notification {
[UIView animateWithDuration:.25f
animations:^{
self.inputContainerView.frame = CGRectMake(0
, /*SCREEN_HEIGHT - 100*/300
, 320
, 30);
}
completion:^(BOOL finished){
}];
}
3)在视图控制器消除时,移除键盘事件的通知:
[[NSNotificationCenter defaultCenter] removeObserver:self];
ps:
ios5隐藏功能分享——“字典”功能(英英字典):
在任何输入框中选中一个英文单词,此时会有选择项“复制”,“删除”...等,还有一个向右的箭头,点击这个向右的箭头后,就会出现“定义”选项,点击这个“定义”按钮即会弹出这个英语单词的英文解释。
ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)相关推荐
- android获得键盘高度,Android 获取键盘高度,显示键盘和隐藏键盘
运行效果图 项目中一般会有"评论"的功能,为了更好的进行UI交互操作,就需要监听键盘弹出并获取键盘高度.所以就写一个键盘工具类. 监听键盘弹出思路:首先获取DecorView.he ...
- iOS键盘监听以及获取键盘高度
在文本输入时,界面会弹出键盘.有时,当文本输入框过低,被键盘遮挡,使用户无法看见输入框文本内容,这就使得用户体验过低. 所以需要我们对键盘进行监控并获取键盘高度,调节界面或文本框高度进行处理.如下图, ...
- Taro小程序,底部输入框获取键盘高度动态设置bottom有延迟解决
Taro小程序,底部输入框获取键盘高度动态设置bottom有延迟0.5s左右 业务场景: Taro+TaroUI+微信小程序 底部固定了一个输入框,当聚焦时输入框自然要上推页面才合理.但不能设置adj ...
- h5如何动态获取键盘高度_H5 键盘兼容性小结
在 H5 项目中,我们会经常遇到页面中存在单个甚至多个 input/textarea 输入框与底部固定元素的布局情况.在 input/textarea 输入框获取焦点时,会自动触发键盘弹起,而键盘弹出 ...
- h5如何动态获取键盘高度_动态获取键盘高度
//在遇到有输入的情况下.由于现在键盘的高度是动态变化的.中文输入与英文输入时高度不同.所以输入框的位置也要做出相应的变化 #pragma mark - keyboardHight -(void)vi ...
- android获取键盘高度
方案一:监听布局高度变化,使用屏幕高度减去可用高度,剩余高度即键盘高度 private ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutL ...
- flutter 弹出框键盘遮挡 获取键盘高度
键盘高度:MediaQuery.of(context).viewInsets.bottom (此高度只能在键盘唤醒时在build中获取,弹出键盘会执行build) 看代码: iimport 'pack ...
- flutter获取键盘高度
在build方法中调用: var keyboardSize = MediaQuery.of(context).viewInsets.bottom; 键盘弹出时,即可获取到键盘高度.
- 为什么定义!doctype html表格高度变高,!DOCTYPE html声明下div高度100%的问题解决方法...
在使用HTML代码创建网页,如果声明了,并且在代码中有div设置了高度为100%,可能会出现显示不正常的情况.比如下面这个代码: Title * {margin:0px;padding:0px;} d ...
最新文章
- 新趋势:工具赋能企业数字化转型,驱动组织升级!
- JDK 16 即将发布,迎来重大改变,新特性速览!
- 自动添加html结束标志,XHTML标签都有一个结束标记
- 2018.3.26 1501 二叉树最大宽度和高度
- (HttpURLConnection)强制转化
- Maven 配置文件 POM 的常用插件配置代码
- vue-cli2、vue-cli3脚手架详细讲解
- 模板方法(Template)模式
- 使用php第三方包mpdf将网页装换成pdf文件【2】
- 专业好用的数据恢复软件推荐
- python大数据毕设选题
- canoe Demo版本申请流程
- 菩提心的修法-四无量心的具体修法
- ORA-00932: 数据类型不一致: 应为 -,但却获得 -
- VS编程,WPF控件增加图片背景的一种方法
- 干货|仿古瓷砖的专业知识总结
- SimpleWord 简词开发记录笔记
- 应用计算机解数学模型之我见,计算机模拟算法在数学建模中的应用
- 点评中国互联网CEO语录
- php中文拼音模糊,两种php中文字符转拼音问题解决方法