我们在开发中会遇到这样的情况:调用键盘时需要界面有一个调整,避免键盘遮掩输入框。
但实现时你会发现,在不同的手机上键盘的高度是不同的。这里列举一下:
//获取键盘的高度 /* 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); }
p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px ".PingFang SC"; color: #454545 }
span.s1 { font: 14.0px "Helvetica Neue" }
时间: 2024-11-03 03:38:44