Ios UIKeyboardFrameEndUserInfoKey高度不正确(应小于48磅)

Ios UIKeyboardFrameEndUserInfoKey高度不正确(应小于48磅),ios,iphone,uikeyboard,Ios,Iphone,Uikeyboard,我正在尝试根据键盘高度滚动视图。这是我在viewDidLoad中的代码: [[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillChangeFrameNotification object:nil queue:nil usingBlock:^(NSNotification *note) { lastKeyboardFrame = [note.userInfo[UIKeyboardFrameEn

我正在尝试根据键盘高度滚动视图。这是我在
viewDidLoad
中的代码:

[[NSNotificationCenter defaultCenter] addObserverForName:UIKeyboardWillChangeFrameNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
        lastKeyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    }];
(在我获得
lastKeyboardFrame
后,我使用它将视图推到顶部等。)

我有一些文本视图,我的视图控制器是它们的委托。下面是我如何设置整个视图的动画:

-(void)textViewDidBeginEditing:(UITextView *)textView{
    self.editingViewBottomConstraint.constant = lastKeyboardFrame.size.height;
    [UIView animateWithDuration:0.25 animations:^{
        [self.view layoutIfNeeded];
    }];
}

-(void)textViewDidEndEditing:(UITextView *)textView{
    self.editingViewBottomConstraint.constant = 0;
    [UIView animateWithDuration:0.25 animations:^{
        [self.view layoutIfNeeded];
    }];
    lastKeyboardFrame = CGRectZero;
}
self.editingViewBottomConstraint
是“我的视图到底部布局”指南的底部约束。它可以工作,但键盘高度显示不正确。以下是它的显示方式:

经过反复试验,我发现“额外”空间的高度正好是48磅。如果我从高度中减去48,效果很好:

在iOS 7 iPhone4S模拟器和iPhone6Plus中测试,无论屏幕大小如何,都是一样的。我考虑的第一件事是顶部的预测输入栏,但后来我意识到这个问题在iOS 7.1上也一直存在,而且我的键盘(土耳其语)甚至没有可用的输入栏

原因可能是什么?我找到了答案

我很确定你有一个标签栏。选项卡栏的高度为49点

当常量值为0(键盘隐藏)时,视图仍比0高49点

因此,您有两种选择: 1.继续减去49分。
2.显示视图控制器,而不是按下以摆脱选项卡栏

对于仍在这个问题上结结巴巴的人:我认为最安全的答案是@Oded的答案:

您应该获得
uitabar
的高度,然后从键盘高度中减去:

目标-C:

[[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height-self.tabBarController.tabBar.frame.‌​size.height
Swift

let tabBarHeight = tabBarController?.tabBar.frame.height ?? 0
let keyboardFrame = (notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? 0.0
let adjustedKeyboardHeight = keyboardFrame.height - tabBarHeight

有没有想过?@rob5408没有,不幸的是没有。我在文本视图中将我的视图用作inputAccessoryView,而不是请求系统发出明显有缺陷/混乱的键盘通知。在我的情况下,我的视图已经是inputAccessoryView了。我在整个应用程序中都使用这种方法,这是唯一一个让它失控的地方。我要做些调查。谢谢我有点忘记了我的UITableView没有一直延伸到superview的底部,我在底部有一个按钮。因此,键盘尽职尽责地报告了它的高度,我调整了插图,但我需要将插图调整到键盘高度减去我的按钮高度。嘿@CanPoyrazoğlu,你发现问题的原因了吗?这是正确的。最后我做了
[[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size.height self.tabBarController.tabBar.frame.size.height
我展示的是视图控制器,但仍然存在同样的问题,这对iPhone 10问题很有帮助。这些年后,我们不应该为这个问题苦苦挣扎。iOS开发人员负责在键盘部署时移动内容,但几乎不可能获得键盘的实际大小。
keyboardFrame.height
否则无法从
CGRect
中减去
CGFloat