[英]Simulator's behavior different from the device's?
在我的应用程序中,有一点我想在键盘出现时向上移动按钮,使得该按钮始终可见,然后在键盘消失时将其移回:
- (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));
}];
}
所以我总是通过keyboardFrameBeginRect.size.height-10
修改y
坐标。 我希望代码在模拟器和实际设备上的行为应相同。 它已经在iPhone 4s上进行了测试,并且可以正常工作。 它已在iPhone 5s的模拟器上进行了测试,并按预期工作,现在很有趣:当我通过testflight部署代码时,在调用keyboardDismiss:
footer
不再可见(在iPad2和iPhone 5s上进行了测试,问题是仅适用于iPhone)。 我所做的是在keyboardDismiss:
之前添加了警报keyboardDismiss:
将返回,将打印footer
的y
坐标,结果是在模拟器中为446
,在设备版本(iPhone 5s)中为506
。 结果不同的原因可能是什么?
编辑:
footer
初始化: CGRectMake((kWidth - kHSeparator - kButtonSize), (kHeight - kVSeparator- kButtonSize), kButtonSize, kButtonSize)
,其中kWidth
和kHeight
是屏幕的宽度和高度,其他只是常量。
我希望代码在模拟器和实际设备上的行为应相同。
通常,这是一个安全的假设。 但是,模拟器和设备之间的差异是iOS开发中不可或缺的事实,进行实际的设备测试以发现此类问题非常重要。
但是我想如果要根据键盘大小将视图移动到新位置,则要使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.