UIKeyboardWillShowNotification 为 swift 键盘返回不正确的帧

UIKeyboardWillShowNotification returning incorrect frame for swift keyboard

我正在使用 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 键盘
this issue

相同

嗯,问题出在 swift 键盘上,方法 -(void) keyboardWillShow:(NSNotification *)note 被调用了三次,每次都是 returns 三个不同的 origin.y 值和高度它给出 keyboardBounds = (0, 524, 320, 44),第二次它给出 keyboardBounds = (0, 308, 320, 260) 最后第三次当它被调用时 returns keyboardBounds = (0, 271、320、297)。

由于第三方键盘尺寸不固定.. 它们的尺寸根据视图的布局而固定,因此类似于自动布局情况(viewDidLoad、viewWillAppear viewWillLayout、viewDidLayout 然后是 viewDidAppear,所以您得到的确切框架知道在 viewDidAppear 或 viewDidLayout 中,View 已经布局。),当它的视图完全布局时,它会得到精确的框架。

也许你可以尝试其他通知,例如:UIKeyboardDidShowNotificationUIKeyboardDidChangeFrameNotificationUIKeyboardWillShowNotification

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