在我的应用程序中,如果键盘出现使按钮始终可见,我想移动一个按钮,并在键盘解除时将其移回:
- (void) keyboardDismiss :(NSNotification*)notification{
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];
UIView animateWithDuration:0.4 animations:^{
footer.frame = CGRectMake(X(footer), Y(footer)+keyboardFrameBeginRect.size.height-10, WIDTH(footer), HEIGHT(footer));
}];
}
- (void) keyboardShow:(NSNotification*)notification{
NSDictionary* keyboardInfo = [notification userInfo];
NSValue* keyboardFrameBegin = [keyboardInfo valueForKey:UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardFrameBeginRect = [keyboardFrameBegin CGRectValue];
[UIView animateWithDuration:0.4 animations:^{
footer.frame = CGRectMake(X(footer), Y(footer)-keyboardFrameBeginRect.size.height+10, WIDTH(footer), HEIGHT(footer));
}];
}
所以我总是按y
修改keyboardFrameBeginRect.size.height-10
坐标。我期望的是代码在模拟器和实际设备上的行为应该相同。它在iPhone 4s上进行了测试,并按预期工作。它在iPhone 5s的模拟器中进行了测试并按预期工作,现在是有趣的部分:当我通过testflight部署代码时,在调用keyboardDismiss:
之后,footer
不再可见(在iPad2上测试)和iPhone 5s和问题只有iPhone)。我所做的是在keyboardDismiss:
返回之前添加一个提醒,它会打印y
的{{1}}坐标,结果在模拟器中为footer
并且{{1}在设备版本(iPhone 5s)中。可能是不同结果的原因是什么?
编辑:
446
初始化:506
其中footer
和CGRectMake((kWidth - kHSeparator - kButtonSize), (kHeight - kVSeparator- kButtonSize), kButtonSize, kButtonSize)
是屏幕宽度和高度,其他只是常量。
答案 0 :(得分:0)
我期望代码在模拟器和实际设备上的行为方式相同。
一般来说,这是一个安全的假设。但是,模拟器和设备之间的差异是iOS开发的一部分,而且进行实际的设备测试以发现这些问题非常重要。
但我想如果你想根据键盘大小将视图移动到新位置,你会想要使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。