【问题标题】:How to reliably get keyboard height in iOS Swift? [duplicate]如何在 iOS Swift 中可靠地获取键盘高度? [复制]
【发布时间】:2018-12-10 12:10:20
【问题描述】:

我有这段代码来检测键盘何时显示并获取它的高度。

@objc func keyboardWasShown (_ notification: Notification) {
    let keyboardSize = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue.size;
    print ("KEYBOARD SIZE: \(keyboardSize.height)");
}

起初,当我第一次点击 UITextView 使其成为第一响应者时,控制台显示 271.0 点。

然后我点击视图以关闭键盘。然后我再次点击 UITextView。现在显示 226.0 点。

第一次和后续试用版的键盘布局没有变化。一开始我总是得到 271,然后下一个总是 226。正确的是 271。

为什么会这样?以及如何解决?

【问题讨论】:

  • @Scriptable 是的,我在下面自己发布的答案中提到了这一点。

标签: ios swift keyboard-events uikeyboard notificationcenter


【解决方案1】:

From 是answer,我发现我应该使用UIKeyboardFrameEndUserInfoKey 而不是UIKeyboardFrameBeginUserInfoKey

【讨论】:

  • 这应该是正确答案,而不是IQKeyboardManager的建议
【解决方案2】:

你可以通过

获得键盘框架
override func viewDidLoad() {
    super.viewDidLoad()
    let center = NotificationCenter.default
    center.addObserver(self, selector: #selector(keyBoardDidShow(_:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
    // Do any additional setup after loading the view.
}
override func viewDidDisappear(_ animated: Bool) {
    let center = NotificationCenter.default
    center.removeObserver(self, name: NSNotification.Name.UIKeyboardDidShow, object: nil)
}



func keyBoardDidShow(_ notification:Notification)
{
    print((notification.userInfo?["UIKeyboardBoundsUserInfoKey"] as! CGRect).height)
}

【讨论】:

    【解决方案3】:

    只需将this 库导入您的项目即可。它会自动处理每一件事。

    【讨论】:

      【解决方案4】:

      不知道您的具体情况,但尝试使用 IQKeyboard 它将解决您的所有问题。

      【讨论】:

      • 感谢您的信息!
      • 最欢迎您!
      • 请给出明确的答案,不要提出建议或建议。这个答案可能应该在 cmets 中。
      • @BadhanGanesh 这实际上解决了我当前和未来使用 iOS 键盘的所有问题。
      猜你喜欢
      • 2014-11-24
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      相关资源
      最近更新 更多