获得键盘的高度不适用于IOS 11 beta

时间:2017-08-08 13:41:21

标签: ios swift ios11

我有以下代码可用于IOS 10,但现在它在IOS 11测试版上运行时不再有效。

if let userInfo = notification.userInfo {
    if let keyboardSize = (userInfo[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        print(keyboardSize)
    }
}

这是我打印尺寸时得到的结果:

(0.0, 0.0, 0.0, 0.0)
(0.0, 736.0, 414.0, 0.0)

任何人都知道为什么停止工作?或者,如果我有其他选择来获得键盘大小?

3 个答案:

答案 0 :(得分:15)

使用UIKeyboardFrameEndUserInfoKey代替UIKeyboardFrameBeginUserInfoKey

因此,将代码更改为以下内容将解决您的问题:

if let userInfo = notification.userInfo {
    if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        print(keyboardSize)
    }
}

答案 1 :(得分:3)

我有同样的问题。 Doug Amos的答案是对的。我只是想让它更清楚。 这是我的代码:

@objc func keyboardWillShow(notification:NSNotification){

        var userInfo = notification.userInfo!
        var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
        if keyboardFrame.size.height <= 0 { // to fix bug on iOS 11
            keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
        }
        keyboardFrame = self.view.convert(keyboardFrame, from: nil)
    }

答案 2 :(得分:0)

我在我的应用中使用了 Swif 3 +

{{1}}