2010-04-21 11 views
25

Wenn ein UILabel zu viel Text enthält, wie kann ich mein Etikett so einrichten, dass es die Schriftgröße verkleinert?Wie kann ich Text in einer UILabel-Schrumpfschriftgröße erstellen?

Hier ist, wie ich meine UILabel bin Einrichtung:

 descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(200, 30, 130, 150)]; 
    [descriptionLabel setFont:[Utils getSystemFontWithSize:14]]; 
    [descriptionLabel setBackgroundColor:[UIColor clearColor]]; 
    [descriptionLabel setTextColor:[UIColor whiteColor]]; 
    descriptionLabel.numberOfLines = 1; 
    [self addSubview:descriptionLabel]; 

Antwort

58
descriptionLabel.adjustsFontSizeToFitWidth = YES; 
descriptionLabel.minimumFontSize = 10.0; //adjust to preference obviously 

Das folgende Beispiel getestet und auf dem iPhone Simulator 3.1.2 überprüft wird:

UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(90, 0, 200, 30)]; 

descriptionLabel.font = [UIFont systemFontOfSize:14.0]; 
descriptionLabel.minimumFontSize = 10.0; 
descriptionLabel.adjustsFontSizeToFitWidth = YES; 
descriptionLabel.numberOfLines = 1; 
descriptionLabel.text = @"supercalifragilisticexpialidocious even thought he sound of it is something quite attrocious"; 
+0

Ich habe diese Zeile hinzugefügt, aber es scheint nicht zu funktionieren. Selbst wenn ich mein Rect als etwas Kleines wie CGRectMake (200,30,10,10) anwende, passiert nichts. –

+0

Ich bin mir nicht sicher, was genau Ihr [Utils getSystemFontWithSize:] zurückgibt ... Ich bearbeite meine Antwort, um ein Beispiel einzubeziehen, das ich gerade getestet und überprüft habe. – prendio2

+5

Ab iOS 6 sollten Sie 'setMinimumScaleFactor' anstelle von' minimumFontSize' verwenden. –

21

den Text in einem mehrzeiligen UILabel Zum Ändern der Größe, können Sie diese Hilfsmethode auf code (Basis von 11 Pixel Studios):

+ (void)resizeFontForLabel:(UILabel*)aLabel maxSize:(int)maxSize minSize:(int)minSize { 
// use font from provided label so we don't lose color, style, etc 
UIFont *font = aLabel.font; 

// start with maxSize and keep reducing until it doesn't clip 
for(int i = maxSize; i >= minSize; i--) { 
    font = [font fontWithSize:i]; 
    CGSize constraintSize = CGSizeMake(aLabel.frame.size.width, MAXFLOAT); 

    // This step checks how tall the label would be with the desired font. 
    CGSize labelSize = [aLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 
    if(labelSize.height <= aLabel.frame.size.height) 
    break; 
} 
// Set the UILabel's font to the newly adjusted font. 
aLabel.font = font; 
} 
+0

In Ihrer for-Schleife sollte die Bedingung sein "i> = minSize", nicht "i> 10" –

+0

Sie haben Recht .. danke @chrispix. –

0

wenn Sie wollen, dass die Anzahl der Zeilen auch bei Bedarf zu erhöhen, Steve N-Lösung verwenden, mit der if-Anweisung wie folgt:

if(labelSize.height <= aLabel.frame.size.height) 
{ 
    aLabel.numberOfLines = labelSize.height/font.lineHeight; 

    break; 
} 
+3

Oder setzen Sie einfach die Anzahl der Zeilen auf 0. – Jonathan

Verwandte Themen