2011-01-15 4 views
0

J'ai une vue de texte (fichier nib) avec un UITextView a maximisé la vue entière.UITextView ne pas redimensionner le long le clavier woth montrant

Lorsque je place le viewcontroller sur le contrôleur de navigation, je charge le clavier dans la méthode viewDidLoad de la vue texte.

Mon problème est que lorsque j'écris un texte qui a plus de lignes que de place, le texte est derrière le clavier. J'ai suivi la sampe d'Apple here.

Si je connecte le "newTextViewFrame" c'est NULL. mais si je débogue la chose, elle a une bonne valeur. Même si je le code en dur, l'UITextView ne change pas de taille.

Voici mon code:

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

/* 
Reduce the size of the text view so that it's not obscured by the keyboard. 
Animate the resize so that it's in sync with the appearance of the keyboard. 
*/ 

NSDictionary *userInfo = [notification userInfo]; 

// Get the origin of the keyboard when it's displayed. 
NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]; 

// Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position. 
CGRect keyboardRect = [aValue CGRectValue]; 
keyboardRect = [self.view convertRect:keyboardRect fromView:nil]; 

CGFloat keyboardTop = keyboardRect.origin.y; 
CGRect newTextViewFrame = self.view.bounds; 
newTextViewFrame.size.height = keyboardTop; - (self.view.bounds.origin.y); 

// Get the duration of the animation. 
NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey]; 
NSTimeInterval animationDuration; 
[animationDurationValue getValue:&animationDuration]; 

// Animate the resize of the text view's frame in sync with the keyboard's appearance. 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:animationDuration]; 

createListingTextView.frame = newTextViewFrame; 

[UIView commitAnimations]; 
NSLog(@"Textview resized: %@", newTextViewFrame); 

}

Ma tâche i simple: mettre en œuvre une vue avec un UITextView et le clavier ouvert et faites défiler la UITextView chaque fois que le texte dépasse.

conseils ... S'il vous plaît

Répondre

1

Il y a un point-virgule après keyboardTop sur la ligne

newTextViewFrame.size.height = keyboardTop; - (self.view.bounds.origin.y); 

Cela empêcherait certainement newTextViewFrame d'obtenir la hauteur ajustée.

+0

Woops. Mon erreur. J'ai mis le point-virgule là pour un but de test. Le problème persiste toujours. Il semble que l'UITextView soit en quelque sorte redessiné sans mes paramètres. Même si je diminue la taille dans IB, UITextView est maximisé lorsque le View i s'affiche. – esbenr

+0

Odd. Vous devez demander l'évidence: êtes-vous sûr de changer le bon fichier de plumes? Avez-vous essayé un nettoyage et reconstruire? – Daniel

+0

Ouais ... J'ai effectivement essayé de copier-coller l'exemple d'Apple, et je n'arrive toujours pas à le redimensionner. Même si je définis la taille de TextArea sur une petite taille dans le concepteur, la zone est "maximisée" lors de l'exécution de l'application. Je le code ci-dessus devrait fonctionner, mais il me manque quelque chose qui maximise la zone à l'exécution. Je vais laisser tomber le code entier quand je rentre du travail. – esbenr

Questions connexes