7
votes

Calculez le contenu de ScrollView

Je vais avoir une vision de Scroll View comme vue détaillée de la cellule de TableView. Il existe plusieurs vues sur les vues détaillées telles que les étiquettes, les boutons, etc. que je crée via Interface Builder. Ce que je crée via Interface Builder est statique. Je mets tout sur une vue de la hauteur 480.

Une étiquette sur mon envoi détaillé est en train de disposer de texte dynamique qui peut s'étendre à n'importe quelle longueur. Le problème est que je dois définir la taille du contenu de ScrollView pour laquelle j'ai besoin de sa hauteur.

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


0 commentaires

7 Réponses :


0
votes

Je suppose qu'il n'y a pas d'auto en cas de ScrollView, et le contenu doit être calculé pour des vues statiques sur l'écran au moins et pour la dynamique une fois qu'elle doit être calculée sur le déploiement.


0 commentaires

21
votes

Vous pouvez essayer d'utiliser le contenu de ScrollView'Asers. Cela a fonctionné pour moi et j'avais le même problème avec le contrôle à l'aide de contenu dynamique.

    // Calculate scroll view size
float sizeOfContent = 0;
int i;
for (i = 0; i < [myScrollView.subviews count]; i++) {
    UIView *view =[myScrollView.subviews objectAtIndex:i];
    sizeOfContent += view.frame.size.height;
}

// Set content size for scroll view
myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width, sizeOfContent);


1 commentaires

Vous libérez les vues que vous idiotez, ce qui les supprime de la vision de Scroll. Ne pouvait pas coller le code correctement dans le commentaire, ajouté à la place de la réponse.



8
votes

Corriger exemple plus court:

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


1 commentaires

Merci Henrik, c'est vraiment utile! Comme je ne peux pas accepter deux réponses, je vous entamerai .. :)



1
votes

Un moyen un peu plus simple de le faire consiste à nier votre mise en page dans une vue, puis posez cette vue dans la vision de Scroll. 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);


0 commentaires

1
votes

Cela dépend du type de contenu que vous allez ajouter de manière dynamique. Donc, disons que vous avez une grosse données de texte à afficher, puis utilisez l'UITEXTVIEW et, comme il s'agit d'une sous-classe de l'UISCrollView, vous pouvez obtenir le setContSIser de TextView lorsque vous affectez le contenu du texte. Sur la base de celle-ci, vous pouvez définir la taille totale de l'UISCrollView.

[myScrollView setContentSize:yPoint + heightOfLastComponent];


0 commentaires

0
votes
scrollView.contentSize = [scrollView sizeThatFits:scrollView.frame.size]
I believe would also work

0 commentaires

0
votes

J'ai eu la même situation, mais j'ai ensuite écrit une nouvelle version à Swift 4 reflétant la meilleure réponse à Objective-C par Hannes Larsson strong>:

import UIKit

extension UIScrollView {
    func fitSizeOfContent() {
        let sumHeight = self.subviews.map({$0.frame.size.height}).reduce(0, {x, y in x + y})
        self.contentSize = CGSize(width: self.frame.width, height: sumHeight)
    }
}


0 commentaires