iOS11 键盘问题 - 键盘高度不正确

标签 ios iphone height ios11 keyboard-events

键盘有时会向上移动一点,如图here

首先,此问题仅在 iOS11 上发生,而在较早的 iOS 版本上不会发生。 其次,这个问题发生在应用程序中的每个 UITextField 实例中,而不仅仅是特定 View Controller 中的一个特定文本字段。

通过观察UIKeyboardWillShowNotification,发现UIKeyboardFrameEndUserInfoKey中保存的键盘frame不正确,准​​确的说是高度错误。

- (void)keyboardWillShow:(NSNotification *)notification {
    NSDictionary *info = [notification userInfo];
    NSString *curveValue = [info objectForKey:UIKeyboardAnimationCurveUserInfoKey];
    CGRect rect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    NSLog(@"keyboard frame: %@", NSStringFromCGRect(rect));
}

我们在 iPhone7 (11.1) 上运行时得到这样的日志:

keyboard frame {{0, 451}, {375, 216}}
keyboard frame {{0, 292}, {375, 375}}
keyboard frame {{0, 451}, {375, 216}}
keyboard frame {{0, 292}, {375, 375}}
keyboard frame {{0, 292}, {375, 375}}

216应该是正确的高度,而375是错误的。奇怪的是,键盘的高度恰好等于屏幕的宽度。

根据我得到的事实,我认为这是一个 IOS 11 键盘问题,因为它只发生在 iOS 11 上,键盘的高度肯定是由 iOS 控制的,但是由于某种原因它返回了一个错误的高度。

然而,棘手的是,我从我们的应用程序中提取了一个包含文本字段的特定 View Controller 并创建了一个单独的演示项目,然后一切正常。而且我没有通过谷歌搜索发现类似的问题发生在其他人身上。所以我怀疑这可能是因为我们应用程序中的某些设置导致了这个 iOS11 键盘高度问题。

你们以前遇到过这种奇怪的问题吗?或者你们能想到什么可能是罪魁祸首吗?我已经想不通了。谢谢!

最佳答案

整理好了。最后发现是因为我们项目中使用的一个UIView类。

- (void)setWidth:(CGFloat)width;
- (void)setHeight:(CGFloat)height;
- (void)setSize:(CGFloat)size;
- (void)setXPos:(CGFloat)xPos;
- (void)setYPos:(CGFloat)yPos;
- (void)setXPos:(CGFloat)xPos yPos:(CGFloat)yPos;

从 iOS11 开始,这些方法以某种方式成为保留方法,覆盖这些方法将导致这个烦人的问题。

关于iOS11 键盘问题 - 键盘高度不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47624164/

相关文章:

iphone - 在 iOS 应用程序上对数据库或服务使用单元测试或集成测试

javascript - 使用javascript获取页面加载的百分比?

javascript - 如何使用没有 ".css(' lineHeight') ;"and ".css(font-size);"的 Jquery 获取文本中行的大小?

jquery - jquery 无法获取图像的高度

css - div 正在获取不是直接父级的高度

ios - 如何在结构模型中访问枚举? swift

ios - XLPagerTabStrip 在 IOs Swift View Pager 中添加图像和标签

ios - 如何从 ipa 解析 Info.plist 文件

ios - 阻止 Restkit 映射所有结果

ios - View Controller 对于 IOS 模拟器来说太薄了