ios8中的键盘高度不同

Posted

技术标签:

【中文标题】ios8中的键盘高度不同【英文标题】:keyboard height varies in ios8 【发布时间】:2014-11-17 11:35:22 【问题描述】:

我使用下面的代码来获取键盘高度,它在带有 ios8 的 iPhone 5s 设备中与带有 ios7 的 iPhone4s 设备中有所不同。因此,当我在带有 ios8 的 iPhone5s 中点击它时,我的文本字段移动得非常高,而相同的代码工作在带有 ios7 的 iPhone 4s 中很好。有人可以指导如何在两个版本中解决问题。

- (void)keyboardWasShown:(NSNotification*)notification

    NSDictionary* info = [notification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    float kbHeight;
    if (([UIApplication sharedApplication].statusBarOrientation== UIDeviceOrientationPortraitUpsideDown)||([UIApplication sharedApplication].statusBarOrientation== UIDeviceOrientationPortrait))
    
        kbHeight=kbSize.height;
    
    else
    
        kbHeight=kbSize.width;
    



    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbHeight, 0.0);

    self.scroll.contentInset = contentInsets;
    self.scroll.scrollIndicatorInsets = contentInsets;

    CGRect rect = self.view.frame;
    rect.size.height -= (kbHeight);


    if (!CGRectContainsPoint(rect, self.activeField.frame.origin))
    
        CGPoint scrollPoint = CGPointMake(0.0, self.activeField.frame.origin.y - ((kbHeight) - self.activeField.frame.size.height));
        [self.scroll setContentOffset:scrollPoint animated:NO];
    

【问题讨论】:

问题是什么? @Legoless 我认为问题是“有人可以帮助我吗?” :) 是的,因为键盘高度不同,我的应用程序面临一些问题..我怎样才能获得键盘的实际高度 【参考方案1】:

只需替换代码中的行

CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

CGSize kbSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

让我知道它是否有效

【讨论】:

【参考方案2】:

这不是问题,因为PredictiveEnable,所以您得到了不同尺寸的键盘。

键盘高度为216,这是固定的,但当Predictive启用时,您将获得253作为高度。

所以你必须为这两种情况编写代码。

【讨论】:

当预测文本开启时如何获取键盘高度? 来自相同的代码,正如我在上面的答案中所说,如果预测为 ON,您将获得 253 作为高度,否则为 216 禁用预测后尝试运行代码,得到一致的高度 不,我的朋友 568 在横向模式下不是高度而是宽度。我还在横向模式下测试了你的代码,预测键盘的高度是 193,没有 162。【参考方案3】:

使用此代码,可能会对您有所帮助

- (void)keyboardWillShow:(NSNotification*)note 
      NSDictionary* info = [note userInfo];
      CGSize _kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
      float kbHeight = _kbSize.width > _kbSize.height ? _kbSize.height : _kbSize.width;

kbHeight 变量存储的键盘高度。

【讨论】:

以上是关于ios8中的键盘高度不同的主要内容,如果未能解决你的问题,请参考以下文章

iOS8以后第三方键盘获取高度不对的问题

在 iOS8 中无法获得正确的键盘高度值

如何获得 iOS 8.3 表情符号键盘高度?

iPhone屏幕键盘的高度是多少?

在 iOS9 公测中设置自定义键盘高度

UITableViewCell 中的多行 UILabel 在 iOS8 中使用 autoLayout 给出错误的高度