繁体   English   中英

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

[英]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:将返回,将打印footery坐标,结果是在模拟器中为446 ,在设备版本(iPhone 5s)中为506 结果不同的原因可能是什么?

编辑:

footer初始化: CGRectMake((kWidth - kHSeparator - kButtonSize), (kHeight - kVSeparator- kButtonSize), kButtonSize, kButtonSize) ,其中kWidthkHeight是屏幕的宽度和高度,其他只是常量。

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

通常,这是一个安全的假设。 但是,模拟器和设备之间的差异是iOS开发中不可或缺的事实,进行实际的设备测试以发现此类问题非常重要。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM