【问题标题】:Issue while getting the frame of the keyboard获取键盘框架时的问题
【发布时间】:2019-06-27 03:41:46
【问题描述】:

我有计算键盘位置的代码,它工作正常,但安装 Xcode11 beta 版后代码崩溃

if let keyBoardPosition = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgPointValue {
   if (self.frame.origin.y + self.frame.height) > keyBoardPosition.y {
            self.frame.origin.y -= (self.frame.origin.y + self.frame.height - keyBoardPosition.y)
        }
    }

'无法获取大小为 16 的值。编码为 {CGRect={CGPoint=dd}{CGSize=dd}} 的类型预计为 32 字节'

【问题讨论】:

  • 你认为这个错误意味着什么?如果您查看您的代码以及错误的含义,您能看出您得到它的任何可能原因吗?

标签: ios swift


【解决方案1】:

UIResponder.keyboardFrameBeginUserInfoKey 返回一个 NSRect NOT CGPoint:

包含标识 CGRect 的 NSValue 对象的键 屏幕坐标中键盘的起始框架矩形。这 框架矩形反映了设备的当前方向。

例如在 iPhone X 竖屏模式下是:

AnyHashable("UIKeyboardFrameBeginUserInfoKey"): NSRect: {{0, 896}, {414, 243}}

改用这个:

if let keyBoardPosition = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? CGRect)?.origin {
        if (self.frame.origin.y + self.frame.height) > keyBoardPosition.y {
            self.frame.origin.y -= (self.frame.origin.y + self.frame.height - keyBoardPosition.y)
        }
    }
}

【讨论】:

  • 谢谢它对我有用,但我想知道在更新到 Xcode 11 之前它是如何工作的。顺便谢谢你。
猜你喜欢
  • 2012-08-12
  • 2015-07-22
  • 1970-01-01
  • 2021-07-02
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
相关资源
最近更新 更多