【问题标题】:View aligned to top of keyboard appears in wrong place in iOS 9 Shortcut Bar only mode在 iOS 9 Shortcut Bar only 模式下,与键盘顶部对齐的视图出现在错误的位置
【发布时间】:2015-11-25 23:41:03
【问题描述】:

iOS 9 为 iOS 8 QuickType bar 添加了一个Shortcut Bar

作为此更改的一部分,如果您将蓝牙键盘连接到 iPad,则键盘处于最小化的仅快捷栏模式(可以通过在模拟器中按 command-k 来模拟)。

我的代码使用类似于以下的方法获取键盘高度:

CGRect keyboardFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat keyboardHeight = keyboardFrame.size.height; // = 313

问题是当键盘在展开和折叠状态之间切换时,高度保持不变,导致我的视​​图出现在它的旧位置:

期望的行为:


(注意红色视图是如何连接到键盘顶部的)

实际行为:

将红色视图附加到键盘顶部的正确方法是什么?

【问题讨论】:

    标签: ios ipad keyboard ios9


    【解决方案1】:

    问题在于大多数代码(including Apple 的)忽略了 UIKeyboardFrameEndUserInfoKeyCGRect 而不是 CGSize 的事实.

    // ❌ Bad code, do not use
    - (void)keyboardWasShown:(NSNotification*)aNotification {
        NSDictionary* info = [aNotification userInfo];
        CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
        CGRect bkgndRect = activeField.superview.frame;
        bkgndRect.size.height += kbSize.height;
        [activeField.superview setFrame:bkgndRect];
        [scrollView setContentOffset:CGPointMake(0.0, activeField.frame.origin.y-kbSize.height) animated:YES];
    }
    

    在这里您看到只有键盘高度 (kbSize.height) 正在使用。 rect 的来源很重要,不容忽视。

    当键盘可见时,这是报告的矩形:

    当键盘处于仅快捷栏模式时,这是矩形:

    注意键盘的大部分是如何在屏幕外的,但它仍然是相同的高度。

    要获得正确的行为,请将CGRectIntersection 与视图的边界和该视图内的键盘框架一起使用:

    // ✅ Good code, use
    CGRect keyboardScreenEndFrame = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect keyboardViewEndFrame = [self.view convertRect:keyboardScreenEndFrame fromView:self.view.window];
    CGRect keyboardFrame = CGRectIntersection(self.view.bounds, keyboardViewEndFrame);
    CGFloat keyboardHeight = keyboardFrame.size.height; // = 55
    

    出于同样的原因,应该使用UIKeyboardFrameEndUserInfoKey 而不是UIKeyboardFrameBeginUserInfoKey

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多