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

本文详细介绍了如何在iOS开发中根据不同设备和键盘类型获取键盘的高度和宽度,通过使用通知机制来响应键盘的显示和隐藏,确保应用程序在各种情况下都能正确调整界面布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

原文连接: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(0, -40, IPHONE_WIDTH, IPHONE_HEIGHT);

}

 

转载于:https://www.cnblogs.com/LQCQ-Silent/p/6059411.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值