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