2012-06-12 1 views
0

J'ai une vue dont je voudrais remplir tout l'écran entre un UIToolbar en haut et le clavier en bas. Je suis à l'écoute des messages UIKeyboardWillShowNotification pour détecter lorsque le clavier apparaît et en utilisant ce qui suit pour ajuster la vue:Redimensionner la vue pour remplir l'espace restant entre l'UIToolbar et le clavier

- (void)keyboardWillShow:(NSNotification*)notification { 

    NSDictionary* userInfo = [notification userInfo]; 

    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; 

    [UIView animateWithDuration:0.3f animations:^{ 

     subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, self.view.frame.size.width - 40, self.view.frame.size.height - 62 - keyboardSize.height - 20); 
    }]; 
} 

Cela fonctionne bien en mode portrait, mais dans le paysage, la vue est partout. J'ai essayé de changer la largeur/hauteur quand l'appareil est en mode paysage en vain. Je sais que c'est un truc de base mais j'ai toujours eu du mal à comprendre comment ajuster une vue correctement en mode paysage.

+0

avez-vous mis l'autoresizeMask pour la sous-vue? – Roshit

+0

J'ai essayé avec et sans, ne travaillant toujours pas en mode paysage – JWood

Répondre

1

Vous devez utiliser CGSize screenSize=[[UIScreen mainScreen] bounds].size;

Remplacez ensuite,

subview.frame = CGRectMake(subview.frame.origin.x, 
subview.frame.origin.y, self.view.frame.size.width - 40, 
self.view.frame.size.height - 62 - keyboardSize.height - 20); 

avec cette ligne:

subview.frame = CGRectMake(0, 
subview.frame.origin.y, screenSize.width, screenSize.height - subview.frame.origin.y 
- keyboardSize.height - 20); 

J'ai juste essayé et cela a fonctionné dans les deux directions, espère que ça aide!

+0

Merci pour l'indice, mais cela ne fonctionne pas pour moi. La vue disparaît en haut à gauche de l'écran lors de la rotation vers le paysage. J'ai essayé avec autoresizeMask réglé sur none et flexible largeur/hauteur. – JWood

+0

Salut mec, laissez-moi comprendre votre problème: est-ce lorsque vous montrez le clavier après avoir déménagé au paysage? Ou lorsque vous vous déplacez au paysage après que le clavier est visible? – user1451152

+0

Déplacement vers le paysage après que le clavier est visible. – JWood

0

Ma réponse précédente était pour résoudre le problème lorsque la vue était déjà en mode paysage.

Si votre problème est que lors du déplacement à aménager votre mise en page de vue est pas bien pour vous, alors vous inscrire à la notification suivante:

UIDeviceOrientationDidChangeNotification

Ensuite, dans la méthode de réception ont quelque chose comme ceci:

- (void)orientationDidChange:(NSNotification*)notification { 
    CGSize screenSize=[[UIScreen mainScreen] bounds].size; 
    CGSize keyboardSize =[myKeyboard frame].size; 

     subview.frame = CGRectMake(0, subview.frame.origin.y, 
     screenSize.width, screenSize.height - subview.frame.origin.y - 
     keyboardSize.height - 20); 
    } 
+0

Merci, mais le problème existe toujours de toute façon. keyboardWillShow: est appelé après la rotation de l'appareil et même lorsque vous montrez le clavier en mode paysage, il déplace encore la vue hors écran. – JWood

+0

plutôt que de mettre une nouvelle réponse juste modifier votre ancienne réponse –

Questions connexes