Redimensionner une vue lorsqu'un clavier apparaît (iOS)

Je me rends compte il y a beaucoup de solutions similaires, tels que TPKeyboardAvoidingApple célèbre solutionet différentes suggestions impliquant l'utilisation de UIScrollView. Dans mon cas, j'ai besoin de redimensionner une vue de prendre en compte le clavier plutôt que de défiler ou de le déplacer. Cette solution plus proche de ce que je suis en train de réaliser, c'était donc ma base. Cependant, je vais avoir un problème de faire les choses dans le paysage de la mode. Ma méthode qui redimensionne la vue lorsque le clavier apparaît est: est-ce

- (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];
}

Cela fonctionne parfaitement en mode portrait.

Redimensionner une vue lorsqu'un clavier apparaît (iOS)

Cependant, en mode paysage, la vue redimensionne de gauche à droite ou de droite à gauche selon la direction dans laquelle l'appareil a été tourné, plutôt que de bas en haut.

Redimensionner une vue lorsqu'un clavier apparaît (iOS)

Il y a clairement quelque chose de mal avec la façon dont je suis l'aide de coordonnées, et certains de cadre de référence n'est pas ce que je pense c'est quand on est en mode paysage, mais je vais avoir un diable de temps à faire le tri comment le résoudre. J'ai essayé de convertir toutes sortes de choses avec -convertRect: mais de rien je vais essayer de me procurer n'importe où.

J'espère vraiment que quelqu'un qui est moins confus par tous ces rectangles et comment ils changent lorsque les changements d'orientation peut repérer ce que je fais mal et ce que je dois faire pour obtenir ce droit. Pour référence, j'ai créé un projet montrant le cas le plus simple qui reproduit le problème, je vais avoir.

source d'informationauteur bkocik