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隐藏功能分享——“字典”功能(英英字典):

  在任何输入框中选中一个英文单词,此时会有选择项“复制”,“删除”...等,还有一个向右的箭头,点击这个向右的箭头后,就会出现“定义”选项,点击这个“定义”按钮即会弹出这个英语单词的英文解释。

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/3174007.html

时间: 2024-10-26 05:49:10

ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)的相关文章

iOS获取键盘高度

CGFloat h = 216; if ([notification.userInfo isKindOfClass:[NSDictionary class]] && notification.userInfo) { NSValue *value = [notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey]; CGSize keyboardSize = [value CGRectValue].size; h =

Android编程获取通知栏高度的方法_Android

本文实例讲述了Android编程获取通知栏高度的方法.分享给大家供大家参考,具体如下: 这里通过反射机制获取通知栏高度 通知栏高度写在dimen文件中: public static int getStatusBarHeight(Context context){ Class<?> c = null; Object obj = null; Field field = null; int x = 0, statusBarHeight = 0; try { c = Class.forName(&qu

如何让Win7系统桌面任务栏变高

  我们使用win7系统的朋友都知道在大家的桌面都会有一个半透明的显示栏目,上面是显示我们的时间声音网络状态,还有我们的开始菜单的图标等都在上面,这些图标点击就可以打开使用了,非常的方便,这个显示栏目一般都是默认的,有些用户不知道怎么就更改了任务栏的高度,变的非常不习惯,那么如何改变这个高度让它恢复呢,小编马上就给大家分享这个教程. 如何把任务栏恢复正常高度的具体方法如下: 1.大家之间用鼠标点击右键任务栏,然后选择取消锁定才能够设置,然后我们用鼠标点击桌面和任务栏相交的地方,我们看到变成一个双

gdi 绘制文字时变宽,变高,加间距功能问题,求助

问题描述 这段代码的功能是在gdi绘制文字时将文字通过m.Scale()方式变宽,变高,并且加间距功能问题,但现在的问题是一旦变换m.Scale()里的参数值,坐标会跟着变,错位,TextRectangle为原始的起点坐标及宽高度,文字是在这个区域内绘制,请大神帮忙,if(!string.IsNullOrEmpty(TextValue))//判断字符串是否为空{char[]fs=TextValue.ToCharArray();SizeFsize=g.MeasureString(fs[0].ToS

win7系统CPU使用率突然变高又突然变低的解决方法

  操作win7纯净版系统时遇到CPU使用率突然变高又突然变低的情况,严重拖慢系统运行速度,还导致电脑发热,如果长时间这样,对电脑硬盘的损耗是很大的,为什么会发生这样的情况呢?很多用户都不知道CPU使用率突然变高又突然变低的原因,下面小编和大家讲解一下win7系统CPU使用率突然变高又突然变低的解决方法. 步骤如下: 1.首先要明白在哪里查看CPU使用率,我们右键桌面的底部工具栏,然后选择启动任务管理器; 2.在弹出的Windows任务管理器选项卡中选择性能选项,在这里就可以查看电脑的CPU使用

iOS 为什么状态栏字体变粗 NavigationBar变高

问题描述 iOS 为什么状态栏字体变粗 NavigationBar变高 如图 求指教 解决方案 是不是因为每家启动页的原因?

echart的柱状图的柱状是否可以拖拽变高

问题描述 如图:echart的柱状图的柱状是否可以拖拽变高,如原来某个柱是20,鼠标拖拽,柱状可以被拖拽到30.现在echart柱状拖拽,变成了一个原点,好像不能实现这个功能.是这样吗?没有分了,感谢!看echart文档,现在是能实现拖拽前:拖拽后:但是我希望拖拽后,柱子变高.

span 高度-关于在同一行中的两个span的高度问题

问题描述 关于在同一行中的两个span的高度问题 遇到这么个问题,因为对前端,尤其是box高度等的理解有限,所以不知道该如何解决,有前端高手看到的话,帮忙解释下是如何导致的,感激不尽 :) html和css代码分别如下: html代码: <div> <p> <span class="kk">中国</span> <span class="vv">北京</span> </p> <p

JavaScript获取浏览器高度和宽度值兼容所有浏览器

实例  代码如下 复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <style type="text/css&quo