Mit der Einführung benutzerdefinierter Tastaturen in iOS wird dieses Problem etwas komplexer.
Kurz gesagt, die UIKeyboardWillShowNotification kann durch benutzerdefinierte Tastaturimplementierungen mehrmals aufgerufen werden:
- Wenn die Apple- Systemtastatur geöffnet wird (im Hochformat)
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 224 gesendet
- Wenn die Swype-Tastatur geöffnet ist (im Hochformat):
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 0 gesendet
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 216 gesendet
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 256 gesendet
- Wenn die SwiftKey-Tastatur geöffnet ist (im Hochformat):
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 0 gesendet
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 216 gesendet
- UIKeyboardWillShowNotification wird mit einer Tastaturhöhe von 259 gesendet
Um diese Szenarien in einer Codezeile richtig zu behandeln, müssen Sie:
Registrieren Sie Beobachter für die Benachrichtigungen UIKeyboardWillShowNotification und UIKeyboardWillHideNotification :
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
Erstellen Sie eine globale Variable, um die aktuelle Tastaturhöhe zu verfolgen:
CGFloat _currentKeyboardHeight = 0.0f;
Implementieren Sie keyboardWillShow , um auf die aktuelle Änderung der Tastaturhöhe zu reagieren:
- (void)keyboardWillShow:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
CGFloat deltaHeight = kbSize.height - _currentKeyboardHeight;
// Write code to adjust views accordingly using deltaHeight
_currentKeyboardHeight = kbSize.height;
}
HINWEIS: Möglicherweise möchten Sie das Versetzen von Ansichten animieren. Das Info- Wörterbuch enthält einen von UIKeyboardAnimationDurationUserInfoKey eingegebenen Wert . Dieser Wert kann verwendet werden, um Ihre Änderungen mit der gleichen Geschwindigkeit wie die angezeigte Tastatur zu animieren.
Implementieren Sie keyboardWillHide zum Zurücksetzen von _currentKeyboardHeight und reagieren Sie darauf, dass die Tastatur geschlossen wird:
- (void)keyboardWillHide:(NSNotification*)notification {
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
// Write code to adjust views accordingly using kbSize.height
_currentKeyboardHeight = 0.0f;
}
keyboardFrameBeginRect
in lokale Koordinaten konvertieren .