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

Posted

技术标签:

【中文标题】iOS11 键盘问题 - 键盘高度不正确【英文标题】:iOS11 keyboard issue - incorrect keyboard height 【发布时间】:2018-05-17 09:00:44 【问题描述】:

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

首先,这个问题只发生在 ios11 上,而不是在早期的 iO​​S 版本上。 其次,这个问题发生在应用程序中的每个 UITextField 实例中,不仅在特定视图控制器的一个特定文本字段中。

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

- (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 控制的,但是由于某种原因它返回了错误的高度。

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

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

【问题讨论】:

见***.com/questions/15402281/… 不正确的高度不会通过帧转换而改变。该线程与此处的问题无关。 @rmaddy 【参考方案1】:

整理好了。终于发现是因为我们项目中使用了一个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 键盘问题 - 键盘高度不正确的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中计算键盘高度?

iPad 上的键盘高度不正确

iOS iPhone 11 Xcode 模拟器键盘(硬和软)返回不正确的字符串

无法在 iOS8 自定义键盘中获得约束

iOS自定义键盘高度启动故障

使用自定义键盘时使 UITableView 滚动到正确的位置