15

我正在使用UIKeyboardWillShowNotificationUIKeyboardWillHideNotification处理键盘。
这是显示键盘时调用的函数:

-(void) keyboardWillShow:(NSNotification *)note
{
    CGRect keyboardBounds;
    //[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
    NSValue* keyboardFrameBegin = [note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey];
    keyboardBounds = [keyboardFrameBegin CGRectValue];  
}  

我得到keyboardBounds = (0, 524, 320, 44),我使用的是5s。不知道为什么origin.y来了 524(应该在 300 附近)和高度为 44 !我也尝试过注释行。键盘绑定的两种方式都是44。此问题仅适用于 swift keyboard和这个问题
一样

4

2 回答 2

2

那么问题在于快速键盘,该方法-(void) keyboardWillShow:(NSNotification *)note被调用了三次,每次它返回三个不同的origin.y值和高度,第一次它给出keyboardBounds =(0、524、320、44),第二次它给出keyboardBounds = (0, 308, 320, 260) 最后第三次调用它返回keyboardBounds = (0, 271, 320, 297)。

由于第三方键盘尺寸不固定..它们的尺寸根据视图的布局方式固定,因此类似于自动布局案例(viewDidLoad,viewWillAppear viewWillLayout,viewDidLayout 然后是 viewDidAppear,因此您可以在 viewDidAppear 或 viewDidLayout 中了解确切的框架, 视图已经被布局的地方。),当它的视图被完全布局时,它会得到精确的框架。

于 2015-12-19T09:52:41.387 回答
0

或许你可以试试其他的通知,比如:<code>UIKeyboardDidShowNotification ,<code>UIKeyboardDidChangeFrameNotification。UIKeyboardWillShowNotification

只是告诉你键盘会显示给你,不能告诉你确切的键盘显示框架。

于 2015-12-21T07:08:35.870 回答