模拟器的行为与设备的不同?

时间:2014-11-25 15:44:16

标签: ios objective-c xcode

在我的应用程序中,如果键盘出现使按钮始终可见,我想移动一个按钮,并在键盘解除时将其移回:

- (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其中footerCGRectMake((kWidth - kHSeparator - kButtonSize), (kHeight - kVSeparator- kButtonSize), kButtonSize, kButtonSize)是屏幕宽度和高度,其他只是常量。

1 个答案:

答案 0 :(得分:0)

  

我期望代码在模拟器和实际设备上的行为方式相同。

一般来说,这是一个安全的假设。但是,模拟器和设备之间的差异是iOS开发的一部分,而且进行实际的设备测试以发现这些问题非常重要。

但我想如果你想根据键盘大小将视图移动到新位置,你会想要使用UIKeyboardFrameEndUserInfoKey而不是UIKeyboardFrameBeginUserInfoKey。