web-dev-qa-db-ja.com

キーボードの高さを取得しても機能しませんIOS 11ベータ版

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)

なぜこれが機能しなくなったのか誰もが知っていますか?または、キーボードサイズを取得するための他の選択肢がある場合はどうなりますか?

16
Adrian

UIKeyboardFrameEndUserInfoKeyの代わりにUIKeyboardFrameBeginUserInfoKeyを使用してください

したがって、コードを次のように変更すると、問題が修正されます。

if let userInfo = notification.userInfo {
    if let keyboardSize = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
        print(keyboardSize)
    }
}
15
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)
    }
3
Chi Minh Trinh

私は自分のアプリでこのコードをSwift 3 +で使用しました

    var userInfo = notification.userInfo
    if let keyboardFrame = (userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue{
        print(keyboardFrame.height)
        if keyboardFrame.size.height <= 0 { // To fix bug on iOS 11
            if let newKeyboardFrame = (userInfo?[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue{
                print(newKeyboardFrame.height)
            }
        }
    }
    view.layoutIfNeeded()
0
Dasoga