2010-11-04 18 views

Antwort

106

Dies vorausgesetzt, dass Sie bereits die Schriftart gesetzt haben:

label.text = @"some text"; 
[label sizeToFit]; 

Sie werden auch eine maximale Breite definieren müssen, und sagen Sie Ihrem Programm, was zu tun ist, wenn sizeToFit Ihnen eine Breite gibt, die größer als das Maximum ist.

+3

sizeToFit-Methode ist eine Methode von UIView. – TopChul

+53

Wie definiert man eine maximale Breite? –

+0

+1 Diese Antwort hat mir am besten geholfen. –

7

Ich sehe hier drei Optionen.

Zuerst machen Sie Etikettengröße groß genug, um jeden Text zu halten. Das ist am einfachsten, funktioniert aber nicht immer gut - hängt von den Umgebungsansichten ab.

Zweitens kann Label Größe der Schriftart für längeren Text anpassen (adjustsFontSizeToFitWidth Eigenschaft). Dies ist oft nicht wünschenswert, verschiedene Schriftarten in Elementen könnten hässlich aussehen.

Die letzte Option besteht darin, die Beschriftung programmgesteuert entsprechend dem aktuell gehaltenen Text zu ändern. Um die Größe zu berechnen erforderlich, um den Text mit aktuellen Schriftart verwenden, so etwas zu halten:

CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap]; 
+0

Wenn wir UILineBreakModeWordWrap verwenden wir mehrere Linien auf UILabel eingeben können, Wie kann ich den Zeilenabstand zwischen zwei Linien eingestellt. –

21

Gehen Sie folgendermaßen vor, nehmen Sie an, dass die folgende messageLabel das Etikett ist, das den gewünschten Effekt haben soll. Nun versuchen diese einfache Linie von Codes:

// Set width constraint for label; it's actually the width of your UILabel 
    CGFloat constrainedWidth = 240.0f; 
    // Calculate space for the specified string 
    CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)]; 
    messageLabel.text = yourText; 
    messageLabel.numberOfLines = 0;// This will make the label multiline 
+7

Das ist eigentlich eine wirklich gute Antwort ... Nur nicht für diese spezielle Frage! Diese Antwort funktioniert gut, wenn Sie die * Höhe * eines 'UILabel' automatisch anpassen und gleichzeitig eine feste Breite beibehalten möchten. Das ist genau das, wonach ich gesucht habe, als ich auf diese Seite kam. Ich würde gerne Ihre Antwort abstimmen ... aber sie beantwortet die gestellte Frage nicht. Gute Lösung dennoch und wird wahrscheinlich anderen helfen, die über diese Seite stolpern. –

+1

Danke jon! Eigentlich habe ich auch nach dieser Lösung gesucht, und nebenbei habe ich es geschafft, und dann dachte ich, ich sollte es hier teilen. :) BTW, genau was passiert ist, ist, dass ich die Frage nicht sehr gut bemerkt habe, also habe ich den Fehler gemacht, denke ich. Entschuldigung dafür, und froh, dass es dir geholfen hat: D –

+0

Nun, es hat mir geholfen, abzustimmen. –

12
NSString *[email protected]"I am here."; 
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]]; 
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)]; 
[label setText:txt1]; 
1

diese Folgen.

CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]]; 
[label setFrame:CGRectMake(x,y,stringsize.width,height)]; 
[label setText: yourString]; 
+0

Diese Methode ist veraltet –

2

Wenn Sie Ihre Schriftart und seine Größe bereits, und wenn Sie Ihren Rahmen definiert, versuchen Sie Folgendes für diese beiden gemeinsamen Bedingungen:

if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines 
else [label setNumberOfLines:1]; // one line only 

// Adjust your font size to fit your desired width. 
[label setAdjustsFontSizeToFitWidth:YES]; 
+0

Angenommen, Sie versuchen, mehrere Zeilen zu markieren, dann ist dies der richtige Ansatz. Bei der Einzelzeilenbeschriftung natürlich die Anzahl der Zeilen auf 1 setzen. –

1

Wie sizeWithFont in IOS abgeschrieben 7.0 dann Sie Code unten

#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) 



if (SYSTEM_VERSION_LESS_THAN(@"7.0")) { 
     // code here for iOS 5.0,6.0 and so on 
     CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]]; 
    } else { 
     // code here for iOS 7.0 
     fontSize = [itemCat_text sizeWithAttributes: 
          @{NSFontAttributeName: 
           [UIFont fontWithName:@"Helvetica" size:12]}]; 
    } 
1

Mit auto Layout:

enter image description here

Auf Viewcontroller:

override func viewDidLoad() { 
     super.viewDidLoad() 

self.sampleLabel.text = "Electrical Maintenance and Repair" 
      self.sampleLabel..sizeToFit() 

} 
Verwandte Themen