2009-09-06 4 views
6

Stellen Sie sich ein UILabel vor, das 200 Pixel breit und 50 Pixel hoch ist. Das Etikett enthält Text und das Etikett verkleinert den Text, sodass er in das Etikett passt. Aber wie würden Sie nun die Größe des UIFont erhalten, wie es auf dem Etikett sichtbar ist? Stellen wir uns vor, die Schriftgröße wurde mit riesigen 100 angegeben, und die Beschriftung wird auf 15 komprimiert. Und dann möchten Sie einige andere Beschriftungen mit wenig Text erstellen, die dieselbe Schriftgröße haben. Gibt es eine Möglichkeit, die Schriftgröße des UIFonts zu erhalten, nachdem es vom Label gedrückt wurde?Wie berechnet man die Größe eines UIFont, wenn der Text im Etikett auf die Breite beschränkt ist?

Antwort

15

Wenn Sie die Größe des UILabel und der breakMode passieren, usw. zu:

CGSize size = [label.text sizeWithFont:label.font minFontSize:10 actualFontSize:&actualFontSize forWidth:200 lineBreakMode:UILineBreakModeTailTruncation]; 

actualFontSize sollte das sein, was Sie suchen.

UPDATE:

Die oben ist veraltet. Das Verfahren jetzt zu verwenden ist:

- (CGRect)textRectForBounds:(CGRect)bounds 
    limitedToNumberOfLines:(NSInteger)numberOfLines 

Hier ist ein Beispiel

CGSize size = [label textRectForBounds:label.bounds 
    limitedToNumberOfLines:1].size; 
+0

So actualFontSize ein CGSize wäre, die ich auf diese Methode als Verweis übergeben? –

+0

Ja. In C und Obj C ist eine Funktion eingeschränkt, wie sie Werte zurückgeben kann. Argumente, die Sie an eine Funktion übergeben, werden ausgewertet und ihr Wert wird vor dem Aufruf der Funktion auf den Stack geschoben. Die Funktion ruft nur diese Werte ab und kann keinen Rückgabewert an sie übergeben. Sofern nicht ein Zeiger gedrückt wird, kann die Funktion den Zeiger verwenden, um auf seine Adresse zu schreiben und sie zu modifizieren. Ich bin zu stark vereinfachend - hier ist actualFontSize einer der zurückgegebenen Werte der Funktion (Methode). – mahboudz

+0

Dies ist in iOS7 veraltet. Gibt es einen iOS8 Ersatz? –

Verwandte Themen