2012-07-23 4 views
1

Le problème est, que j'ai une vue contenant 3 parties.Redimensionner UIView pour adapter son contenu

La première partie est un en-tête simple - toujours la même hauteur! La deuxième partie est une ligne de description simple - toujours la même hauteur!

Maintenant, le problème est la troisième partie. C'est un viewContainer pour les sous-vues calculées dynamiquement (chacune d'elles ayant un contrôleur personnalisé). La hauteur du contenu est dynamique causée par certaines informations textuelles téléchargées à partir d'un backend. Donc parfois je devrais faire défiler pour pouvoir lire tout le texte, parfois non.

Actuellement, je fais de cette façon:

  • Calculer la taille de la UILabel pour un texte spécifique.
  • Ensuite, redimensionnez la vue parente de manière à adapter le UILabel (s'il est plus petit).
  • Puis redimensionnez le scrollView de mon 3-Part-ViewController-View pour s'adapter à ses sous-vues.

Le viewController détail du contenu dynamique:

self.labelDescription.text = self.customData.descriptionText; 
    [self.labelDescription sizeToFit]; 
    if(self.view.frame.size.height < (self.labelDescription.frame.size.height + self.labelDescription.frame.origin.y)) { 
    CGRect newSize = CGRectMake(0, 
           0, 
           self.view.frame.size.width, 
           self.labelDescription.frame.size.height + 
           self.labelDescription.frame.origin.y); 
    self.view.frame = newSize; 
    } 

Le changement de taille de la vue de défilement après l'ajout et le redimensionnement de mon vue détaillée:

[self addChildViewController:controllerCustomData]; 
[self.scrollView addSubview:controllerCustomData.view];  
CGRect newRect = CGRectMake(0, 
          self.viewElementDetailContentContainer.frame.origin.y, 
          controllerCustomData.view.frame.size.width, 
          controllerCustomData.view.frame.size.height); 
controllerCustomData.view.frame = newRect; 
self.scrollView.contentSize = CGSizeMake(self.scrollView.contentSize.width, newRect.origin.y + newRect.size.height); 

Donc ma question est, est-il plus facile façons de le faire?

Répondre

0

Vous pouvez créer une méthode qui fait tout ce dont vous avez besoin. Vous devrez écrire la méthode (peut-être une méthode) une fois et l'utiliser en passant les arguments nécessaires.

Questions connexes