OK. Quindi, guardando il mio vecchio codice, mi sono ricordato, I non utilizzare 2 osservatori (UIKeyboardDidShowNotification
/UIKeyboardDidHideNotification
). Uso un singolo osservatore (UIKeyboardWillChangeFrameNotification
), che viene attivato da ciascun evento: Nascondere la tastiera, mostrare la tastiera, cambiare la cornice della tastiera.
Nel mio caso, la casella di testo e il pulsante invio sono in annidato in un UIView
e questo è vista viene aggiunto nel view
del UIViewController
, sopra ogni altra cosa.
Aggiungere l'osservatore in viewDidAppear
e rimuovere l'osservatore in viewWillDisappear
. (Per evitare l'attivazione di notifiche quando la vista non è attiva).
Le informazioni di cui sopra non sono necessarie per il tuo caso, è stato aggiunto per motivi di informazione. codice rilevante è il seguente:
ADD OSSERVATORE:
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
MANICO DI NOTIFICA:
- (void) keyboardWillChangeFrame:(NSNotification*)notification {
NSDictionary* notificationInfo = [notification userInfo];
CGRect keyboardFrame = [[notificationInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
[UIView animateWithDuration:[[notificationInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]
delay:0
options:[[notificationInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]
animations:^{
CGRect frame = self.textViewContainer.frame;
frame.origin.y = keyboardFrame.origin.y - frame.size.height;
self.textViewContainer.frame = frame;
} completion:nil];
}
Potrebbe essere necessario fare qualche aggiustamento alla linea frame.origin.y...
per i calcoli corretti. Non so se hai uno UITabBarController
o una barra in fondo. La scommessa più sicura qui sarebbe:
frame.origin.y = self.view.frame.size.height - keyboardFrame.size.height - X;
Dove X
è 0 se il VC copre l'intero schermo. In caso contrario, utilizzare le altezze di eventuali barre in basso.
Controllare 'UIKeyboardWillChangeFrameNotification' /' UIKeyboardDidChangeFrameNotification'.Questi vengono attivati ogni volta che cambia la cornice della tastiera, indipendentemente dal fatto che la tastiera si nasconda o no. Ad esempio, cambiando i tipi di tastiera (ascii/emoji) o attivando la barra di testo predittivo sopra la tastiera. – n00bProgrammer
non funziona ... – Albert
OK. Lascia che aggiorni il mio Xcode e i simulatori e ti darò una soluzione di lavoro ottimizzata. Dammi un'ora o così. – n00bProgrammer