键盘有时会向上移动一点,如图here
所示首先,此问题仅在iOS11上发生,而在早期的iOS版本中不发生。 其次,这个问题发生在应用程序中的每个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键盘高度问题。
你们之前有过这种奇怪的问题吗?或者你们有什么可以想到的可能是罪魁祸首?我已经完成了对此的想法。谢谢!
答案 0 :(得分:0)
排序好了。最后发现这是因为我们在项目中使用的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以某种方式,这些方法成为保留方法,并覆盖这些方法将导致这个恼人的问题。