键盘有时会向上移动一点,如图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/