Ich habe Tastaturbenachrichtigungen ohne Probleme verwendet und die genaue Höhe der Tastatur ermittelt.
- (void)keyboardDidShow:(NSNotification *) notification{
CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
NSLog(@"%f",keyboardSize.height);}
Bei iOS 11 beträgt die Tastaturgröße jedoch 0, wenn die Benachrichtigung aufgerufen wird.
Was ist das Problem in diesem Szenario? Ich benutze xcode 9 Beta 5
Ersetzen
UIKeyboardFrameBeginUserInfoKey
mit
UIKeyboardFrameEndUserInfoKey
Das Folgende ist von Apple Docs.
quelle
Versuche dies:
Ersetzen
UIKeyboardFrameBeginUserInfoKey
durchUIKeyboardFrameEndUserInfoKey
quelle
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
Die Methode keyboardWillChangeFrame: wird nicht nur einmal, möglicherweise zweimal oder mehrmals ausgeführt. Möglicherweise wird auf einigen Tastaturen eine spezielle Symbolleiste angezeigt. Die Methode wird zu diesem Zeitpunkt häufig ausgeführt. Sie sollten UIKeyboardFrameBeginUserInfoKey durch UIKeyboardFrameEndUserInfoKey ersetzen , um den endgültigen Frame von zu erhalten die Tastatur.Ich hatte ein ähnliches Problem mit Xcode Version 9.0 (9A235). obwohl ich Swift benutzte. In meiner keyboardWillShow-Methode habe ich Folgendes geschrieben:
Seltsamerweise war heightValue beim ersten Aufruf von keyboardWillShow 216,0, aber bei nachfolgenden Aufrufen war es 0 geworden! Vielleicht ist dies ein Xcode-Fehler.
Ich habe den UIKeyboardFrameBeginUserInfoKey durch einen UIKeyboardFrameEndUserInfoKey ersetzt und das Problem für mich behoben.
quelle
Dieses Problem tritt unter iOS 11 auf.
Ziel-C-Code:
Swift 2.3:
Swift 3:
quelle
Berechnen Sie die Tastaturhöhe mit dem folgenden Code.
Code:
quelle
Ihr Ansatz versucht, die Rahmenhöhe zu ermitteln, bevor sie angezeigt wird. Deshalb sollte sie 0 sein. Ich bin mir nicht sicher, warum dies nicht beim ersten Versuch der Fall ist. Hier ist ein Beispiel, wie Sie die Tastaturhöhe in Swift 4.2 korrekt ermitteln können:
Dadurch werden die Eigenschaften des Tastaturrahmens korrekt bereitgestellt, BEVOR die Tastatur angezeigt wird.
quelle