2010-06-15 6 views
6

J'ai une scrollview comme vue détaillée de la cellule tableview. Il y a plusieurs vues sur la vue détaillée comme des étiquettes, des boutons, etc. que je suis en train de créer grâce au générateur d'interface. Ce que je crée à l'aide du constructeur d'interface est statique. Je mets tout sur une vue de la hauteur 480.Calculez le contenu de scrollview

Une étiquette sur ma vue détaillée est d'avoir un texte dynamique qui peut s'étendre à n'importe quelle longueur. Le problème est que je dois définir la taille du contenu de la scrollview pour laquelle j'ai besoin de sa hauteur.

Comment définir la hauteur de défilement à condition que le contenu soit dynamique?

Répondre

18

Vous pourriez essayer d'utiliser le ContentSize de scrollview'ers. Cela a fonctionné pour moi et j'ai eu le même problème avec le contrôle utilisant le contenu dynamique. Je le fais dans la méthode appelée viewWillAppear dans le contrôleur pour la vue qui contient le scrollview. C'est la dernière chose que je fais avant d'appeler viewDidLoad sur le super.

Espérons que cela résoudra votre problème.

// hannes

+0

Merci beaucoup, Hannes .. Je pense pourquoi cela ne m'a pas frappé .. – neha

+0

Vous libérez les vues que vous itérer à travers, ce qui les retire de la scrollview. Impossible de coller le code correctement dans le commentaire, ajouté comme réponse à la place. –

0

Je suppose qu'il n'y a pas d'auto en cas de scrollview, et le contenu devrait être calculé pour les vues statiques sur l'écran au moins et pour dynamique une fois qu'il devrait être calculé sur la route.

8

correct exemple plus court:

float hgt=0; for (UIView *view in scrollView1.subviews) hgt+=view.frame.size.height; 

[scrollView1 setContentSize:CGSizeMake(scrollView1.frame.size.width,hgt)]; 

Notez que cela hauteurs des sommes, par exemple s'il y a deux sous-vues côte à côte, leurs hauteurs avec les deux sont ajoutées, ce qui rend la somme plus grande qu'elle ne devrait l'être. En outre, s'il existe des écarts verticaux entre les sous-vues, la somme sera inférieure à ce qu'elle devrait être. Hauteur mal embrouille scrollRectToVisible, donnant des positions de défilement au hasard :)

Cette boucle fonctionne et testé:

float thisy,maxy=0;for (UIView *view in scrollView1.subviews) { 
    thisy=view.frame.origin.y+view.frame.size.height; maxy=(thisy>maxy) ? thisy : maxy; 
} 
+0

Thanx Henrik, c'est vraiment utile! Comme je ne peux pas accepter deux réponses, je vais upvote le vôtre .. :) – neha

1

Une façon un peu plus facile de le faire est d'imbriquer votre disposition dans une vue puis mettre ce point de vue dans le scrollview. En supposant que vous utilisez des balises, cela fonctionne comme suit:

UIScrollView *scrollview = (UIScrollView *)[self.view viewWithTag:1]; 
UIView *longView = (UIView *)[self.view viewWithTag:2]; 
scrollview.contentSize = CGSizeMake(scrollView.frame.size.width, longView.frame.size.height); 

De cette façon, le LongView sait combien il est grand, et le contenu du scrollview est tout simplement réglé pour correspondre.

1

Cela dépend du type de contenu que vous allez ajouter dynamiquement. Supposons que vous ayez un grand nombre de données à afficher, puis utilisez UITextView et comme c'est une sous-classe de UIScrollView, vous pouvez obtenir le setContentSize de TextView lorsque vous affectez le contenu du texte. Sur cette base, vous pouvez définir la taille totale de UIScrollView.

float yPoint = 0.0f; 
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 320.0f, 400.0f)]; 

UITextView *calculatorTextView = [[UITextView alloc] init]; calculatorTextView.text = @"My looong content text ..... this has a dynamic content"; ` 


[calculatorTextView sizeToFit]; 


yPoint = yPoint + calculatorTextView.contentSize.height; // Bingo, we have the new yPoint now to start the next component. 

// Maintenant, vous connaissez la hauteur de votre texte et où elle se terminera. Vous pouvez donc créer une étiquette ou un autre TextView et y afficher votre texte. Vous pouvez ajouter ces composants en tant que sous-vue à la scrollview.

UITextView *myDisplayContent = [[UITextView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 300.f, calculatorTextView.contentSize.height)]; 

myDisplayContent.text = @"My lengthy text ...."; 
[myScrollView addSubview:myDisplayContent]; 

// A la fin, définissez la taille du contenu de la « myScrollView » à la longueur totale de la zone d'affichage.

[myScrollView setContentSize:yPoint + heightOfLastComponent]; 

Cela fonctionne pour moi.

0
scrollView.contentSize = [scrollView sizeThatFits:scrollView.frame.size] 

Je crois fonctionne également

Questions connexes