2010-12-16 8 views
0

Nehmen wir an, ich habe zwei UILabels vertikal untereinander in einem UITableViewCell positioniert. Der Zeilenumbruchmodus ist für beide auf UILineBreakModeWordWrap eingestellt.So ordnen Sie dynamisch große UILabels vertikal an?

Ihre horizontale Größe ist fest, aber beide können vertikal strecken, je nachdem wie viel Text sie anzeigen. Wie positioniere ich das darunter liegende dynamisch so, dass sie sich niemals überschneiden würden?

Antwort

2

ich verwende diese Funktion, um die Höhe des Textes zu erhalten, und setze dann die zweite Labelhöhe auf das Ergebnis.

- (CGFloat)HeightOfText:(NSString *)textToMesure widthOfLabel:(CGFloat)width 
{ 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 
    CGSize ts = [textToMesure sizeWithFont:textFont constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    return ts.height+25.0; //you can change the last number to fit the space you wish to have between the labels. 
} 

und verwenden Sie es wie folgt aus:

NSString *firstLabelText = @"the text"; 
CGFloat textSize = [self HeightOfText:firstLabelText widthOfLabel:firstLabel.frame.size.width]; 

dann "textsize" verwenden, um die zweite Etikettenhöhe einzustellen.

hoffe, es wird helfen.

2

Versuchen Sie - [UILabel sizeThatFits:]. Angenommen, Sie legen die Etiketten in einer 300 Pixel breiten Spalte aus, können Sie eine Größe von (300, 99999) übergeben, und es wird Ihnen die Größe sagen, die es tatsächlich braucht, um den Text anzupassen. Sie können das zum Anpassen verwenden die Rahmen Ihrer Etiketten entsprechend.

+0

Eine bessere Antwort @ Shani weil 'sizeWithFont: constrainedToSize: linebreak:' nicht die Ränder enthalten, die ein UILabel fügt aber die UILabel Größe fragen sich 'sizeToFit' verwendet, wird :) – deanWombourne

+0

Guter Punkt. Upvoted @ Shanis –

+0

Hey, danke für die Antworten. Ich habe in der Zwischenzeit erlebt und was ich gefunden habe ist, dass "sizeToFit" und "sizeWithFont" Methoden im Grunde die gleichen Ergebnisse liefern. Darüber hinaus hilft es auch, den Zeilenwert von "UILabel" auf 0 zu setzen, wie es in anderen Posts beschrieben wurde. – kadam

0

Ich habe etwas Ähnliches getan, indem ich den Rahmen der Ansicht zurückgesetzt habe (vorausgesetzt, Sie haben sizeWithFont oder sizeThatFits bereits ausgeführt und die Größe der Beschriftungen angepasst). Ähnlich wie folgt aus:

- (void)positionView:(UIView *)aView belowView:(UIView *)anotherView withPadding:(int)padding 
{ 
    CGRect aFrame = aView.frame; 
    if (anotherView) 
    { 
     aFrame = (anotherView.frame.origin.y + anotherView.frame.size.height); 
    } 
    aFrame.origin.y += padding; 
    aView.frame = aFrame; 
} 
Verwandte Themen