3 回答
TA贡献1936条经验 获得超6个赞
采用
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameEndUserInfoKey];
TA贡献1848条经验 获得超2个赞
随着iOS中自定义键盘的引入,这个问题变得更加复杂。
简而言之,UIKeyboardWillShowNotification可以通过自定义键盘实现多次调用:
当苹果的系统键盘被打开(纵向)
发送的UIKeyboardWillShowNotification的键盘高度为224
当了Swype键盘被打开(纵向):
发送的UIKeyboardWillShowNotification的键盘高度为0
发送的UIKeyboardWillShowNotification的键盘高度为216
发送的UIKeyboardWillShowNotification的键盘高度为256
当SwiftKey键盘被打开(纵向):
发送的UIKeyboardWillShowNotification的键盘高度为0
发送的UIKeyboardWillShowNotification的键盘高度为216
发送的UIKeyboardWillShowNotification的键盘高度为259
为了在一个代码行中正确处理这些情况,您需要:
根据UIKeyboardWillShowNotification和UIKeyboardWillHideNotification通知注册观察者:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
创建一个全局变量以跟踪当前的键盘高度:
CGFloat _currentKeyboardHeight = 0.0f;
实现keyboardWillShow以对键盘高度的当前变化做出反应:
- (void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGFloat deltaHeight = kbSize.height - _currentKeyboardHeight;
// Write code to adjust views accordingly using deltaHeight
_currentKeyboardHeight = kbSize.height;
}
注意:您可能希望为视图的偏移设置动画。该信息字典包含键的值UIKeyboardAnimationDurationUserInfoKey。此值可用于以与显示键盘相同的速度为更改设置动画。
将keyboardWillHide实现为reset _currentKeyboardHeight并对被关闭的键盘做出反应:
- (void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
// Write code to adjust views accordingly using kbSize.height
_currentKeyboardHeight = 0.0f;
}
TA贡献1810条经验 获得超4个赞
在遇到这篇StackOverflow文章之前,我也遇到了这个问题:
转换UIKeyboardFrameEndUserInfoKey
这将向您展示如何使用该convertRect功能,将键盘的大小转换为可用的大小,但要以屏幕方向为准。
NSDictionary* d = [notification userInfo];
CGRect r = [d[UIKeyboardFrameEndUserInfoKey] CGRectValue];
r = [myView convertRect:r fromView:nil];
以前,我有一个iPad应用程序可以使用UIKeyboardFrameEndUserInfoKey但不使用convertRect,并且运行良好。
但是在iOS 8上,它不再能正常工作。突然,它报告说我的键盘在横向模式下的iPad上运行,高度为1024像素。
因此,现在,在iOS 8上,必须使用此convertRect功能。
- 3 回答
- 0 关注
- 910 浏览
添加回答
举报