Je réalise qu'il existe de nombreuses solutions similaires, telles que TPKeyboardAvoiding, Apple's famous solution, et diverses suggestions impliquant l'utilisation de UIScrollView. Dans mon cas, j'ai besoin de redimensionner une vue pour accommoder le clavier plutôt que de le faire défiler ou de le déplacer. This solution se rapproche le plus de ce que j'essaie d'atteindre, donc c'était ma base. Cependant, j'ai un problème à faire fonctionner les choses en mode paysage. Ma méthode qui redimensionne la vue lorsque le clavier apparaît est la suivante:Redimensionner une vue lorsqu'un clavier apparaît (iOS)
- (void)keyboardWillShow:(NSNotification *)note {
NSDictionary *userInfo = note.userInfo;
NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];
CGRect keyboardFrame = [[self textField].superview convertRect:[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:nil];
CGRect statusBarFrame = [[self textField].superview convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];
CGRect bounds = [self textField].superview.bounds;
CGRect newFrame = CGRectMake(0.0, 0.0, bounds.size.width, keyboardFrame.origin.y + statusBarFrame.size.height);
[UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
[self textField].superview.frame = newFrame;
} completion:nil];
}
Ceci fonctionne parfaitement en mode portrait.
Cependant, en mode paysage, la vue redimensionne de gauche à droite ou de droite à gauche en fonction de la direction dans laquelle le dispositif a été mis en rotation, plutôt que de bas en haut.
Manifestement, il y a quelque chose de mal avec la façon dont je l'aide de coordonnées, et un cadre de référence est pas ce que je pense qu'il est en mode paysage, mais je vais avoir un mal fou trier comment le résoudre. J'ai essayé de convertir toutes sortes de choses avec -convertRect: mais rien que j'essaie ne m'amène nulle part. J'espere vraiment quelqu'un qui est moins confus par tous ces rectangles et comment ils changent quand les changements d'orientation peuvent repérer ce que je fais mal et ce que je dois faire pour bien faire les choses. Pour référence, j'ai created a project montrant le cas le plus simple qui reproduit le problème que j'ai.
Vous souhaitez activer l'iPan lorsque le clavier est visible? –
Idéalement, oui, puisque je suis sûr que certains utilisateurs le feront. Mais je pense que si je peux faire fonctionner cette solution (j'ajoute une méthode quand le clavier est caché pour redimensionner la vue), cela fonctionnera automatiquement. Je crois que lorsqu'un périphérique est pivoté avec le clavier affiché, iOS envoie successivement les notifications keyboardWillHide et keyboardWillShow. – bkocik
Merci pour le code d'animation, très pratique. – phatmann