web-dev-qa-db-fra.com

Comment ajouter une fonction de défilement à un UILabel

Dans Xcode, j'ai créé un UILabel qui se redimensionnera automatiquement en fonction du nombre de lignes de texte que je mets dessus. Mais je ne veux pas que la hauteur de l'UILabel dépasse une certaine limite (240 dans mon exemple), le code va comme ceci:

NSString *text = @"imagine this is a huge wall of text\n\n\n"
UILabel *myLabel = [[UILabel alloc] init];
[myLabel setNumberOfLines:0];
CGSize labelSize = [text sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(280, 240) lineBreakMode:myLabel.lineBreakMode];
myLabel.frame = CGRectMake(0, 0, 280, labelSize.height);

Cela fonctionne très bien lorsque mon texte se situe entre 10 et 15 lignes. Mais si je mets quelque chose comme 40 lignes de texte, les lignes de texte supplémentaires iront au-delà de mon UILabel et seront coupées.

Comment puis-je ajouter une fonction de défilement à myLabel pour que myLabel ait toujours une hauteur maximale de 240, et je peux simplement faire défiler vers le bas pour afficher ces lignes de texte supplémentaires dans myLabel?

34
Shakesbeer

Utilisez UITextView ( référence ).

Il est conçu pour faire exactement cela. Désactivez l'édition et vous obtenez une étiquette déroulante.

110
Peter Sarnowski

Vous pouvez ajouter votre UILabel sur un UIScrollView comme ça et vous pouvez aussi faire comme ça ---

scrollView.backgroundColor = [UIColor clearColor];

        UILabel * label = [[UILabel alloc] init];
        [label setNumberOfLines:0];
        label.text=[detailDict valueForKey:@"ABC"];
        [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]];
        CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap];
        int y=0;
        label.frame=CGRectMake(38, y, 245, labelsize.height);
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[UIColor whiteColor]];
        scrollView.showsVerticalScrollIndicator = NO;
        y+=labelsize.height;
        [scrollView setContentSize:CGSizeMake(200,y+50)];
        [scrollView addSubview:label];
        [label release];

Ici, Y est utilisé pour augmenter ou diminuer la taille de l'étiquette comme texte.

1
shivangi