Frage iOS 11 - Tastaturhöhe gibt in der Tastaturbenachrichtigung 0 zurück


Ich habe Tastaturbenachrichtigungen ohne Probleme verwendet und die exakte Höhe von Keyboard erhalten.

- (void)keyboardDidShow:(NSNotification *) notification{
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    NSLog(@"%f",keyboardSize.height);}

aber mit iOS 11 ist die Tastaturgröße 0, wenn die Benachrichtigung aufgerufen wird.

Was ist das Problem in diesem Szenario? Ich benutze xcode 9 Beta 5


75
2017-08-15 08:59


Ursprung


Antworten:


Benutze das:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Für Swift können Sie Folgendes verwenden:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

163
2017-08-15 09:04



Ersetzen UIKeyboardFrameBeginUserInfoKey

mit

UIKeyboardFrameEndUserInfoKey

Das Folgende stammt von Apple Docs.

UIKeyboardFrameBeginUserInfoKey - Der Schlüssel für ein NSValue-Objekt   enthält ein CGRect, das den Startrahmen der Tastatur identifiziert   in Bildschirmkoordinaten.

UIKeyboardFrameEndUserInfoKey - Der Schlüssel für ein NSValue-Objekt   enthält ein CGRect, das den End-Frame der Tastatur in angibt   Bildschirmkoordinaten.


92
2017-08-15 09:04



Versuche dies:

Ersetzen UIKeyboardFrameBeginUserInfoKey mit UIKeyboardFrameEndUserInfoKey


7
2017-08-15 09:16



Ich hatte ein ähnliches Problem mit Xcode Version 9.0 (9A235); obwohl ich Swift benutzte. In meiner keyboardWillShow-Methode habe ich Folgendes geschrieben:

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

    let heightValue = keyboardSize.height    

    ...
}

Seltsamerweise wurde beim ersten Aufruf von keyboardWillShow der Wert heightValue auf 216.0 gesetzt, aber bei nachfolgenden Aufrufen wurde er 0! Vielleicht ist das ein Xcode-Bug.

Ich habe den UIKeyboardFrameBeginUserInfoKey durch einen UIKeyboardFrameEndUserInfoKey ersetzt und das Problem für mich behoben.


5
2017-09-29 16:10



Dieses Problem tritt bei iOS 11 auf.

Ersetzen

"UIKeyboardFrameBeginUserInfoKey" mit "UIKeyboardFrameEndUserInfoKey"

wie unten gezeigt würde das Problem beheben

Objective-C-Code:

CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

Schnelle 2.3:

let keyboardSize = (NfnPsgVar.userInfo![UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue().size

Schnell 3:

let keyboardSize = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue.size

1
2017-12-20 19:33