2012-10-31 19 views
18

Wie kann ich die Etikettenbreite entsprechend dem Text anpassen? Wenn die Textlänge klein ist, möchte ich die Etikettenbreite klein ... Wenn die Textlänge klein ist, möchte ich die Etikettenbreite entsprechend dieser Textlänge. Ist es möglich?iPhone - UILabellenbreite entsprechend dem Text einstellen

Eigentlich habe ich zwei UIlabels. Ich muss diese beiden in der Nähe platzieren. Aber wenn der Text des ersten Labels zu klein ist, entsteht eine große Lücke. Ich möchte diese Lücke beseitigen.

+0

arbeiten mit einschränken Teil. – iDev

+0

Versuch attributedText Text. – Vinayak

Antwort

37
//use this for custom font 
CGFloat width = [label.text sizeWithFont:[UIFont fontWithName:@"ChaparralPro-Bold" size:40 ]].width; 

//use this for system font 
CGFloat width = [label.text sizeWithFont:[UIFont systemFontOfSize:40 ]].width; 

label.frame = CGRectMake(point.x, point.y, width,height); 

//point.x, point.y -> origin for label; 
//height -> your label height; 
+0

Funktioniert gut! Vielen Dank! – badweasel

+12

veraltet in iOS 7.0 – santuxus

3

Probieren Sie diese Optionen,

UIFont *myFont = [UIFont boldSystemFontOfSize:15.0]; 
// Get the width of a string ... 
CGSize size = [@"Some string here" sizeWithFont:myFont]; 

// Get the width of a string when wrapping within a particular width 
NSString *mystring = @"some strings some string some strings..."; 
CGSize size = [mystring sizeWithFont:myFont 
           forWidth:150.0 
       lineBreakMode:UILineBreakModeWordWrap]; 

Sie auch mit [label sizeToFit]; Mit dieser Methode können versuchen, Sie als Rahmen von zwei Etiketten gesetzt,

[firstLabel sizeToFit]; 
[secondLabel sizeToFit]; 
secondLabel.frame = CGRectMake(CGRectGetMaxX(firstLabel.frame), secondLabel.origin.y, secondLabel.frame.size.width, secondLabel.frame.size.height); 
2

sizeWithFont constrainedToSize:lineBreakMode: die ursprüngliche Methode zu verwenden ist. Hier ist ein Beispiel dafür, wie es zu benutzen ist unten:

//Calculate the expected size based on the font and linebreak mode of your label 
CGSize maximumLabelSize = CGSizeMake(296,9999); 

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; 

//adjust the label the the new height. 
CGRect newFrame = yourLabel.frame; 
newFrame.size.height = expectedLabelSize.height; 
yourLabel.frame = newFrame; 
0

Versuchen Sie Folgendes:

/* Consider these two labels as the labels that you use, 
and that these labels have been initialized */ 

UILabel* firstLabel; 
UILabel* secondLabel; 

CGSize labelSize = [firstLabel.text sizeWithFont:[UIFont systemFontOfSize:12]]; 
//change the font size, or font as per your requirements 

CGRect firstLabelRect = firstLabel.frame; 

firstLabelRect.size.width = labelSize.width; 
//You will get the width as per the text in label 

firstLabel.frame = firstLabelRect; 


/* Now, let's change the frame for the second label */ 
CGRect secondLabelRect; 

CGFloat x = firstLabelRect.origin.x; 
CGFloat y = firstLabelRect.origin.y; 

x = x + labelSize.width + 20; //There are some changes here. 

secondLabelRect = secondLabel.frame; 
secondLabelRect.origin.x = x; 
secondLabelRect.origin.y = y; 

secondLabel.frame = secondLabelRect; 
+0

Sorry ... das funktioniert nicht für mich .. :( – Dev

+0

Was ist das Problem, dass Sie konfrontiert sind? –

+0

Ich habe den Code bearbeitet, sehen, ob es jetzt funktioniert. –

12

Funktion sizeWithFont: in iOS ist veraltet 7.0, so dass Sie sizeWithAttributes: für iOS 7.0 verwenden +. Auch ältere Versionen suport, dieser Code unten können verwendet werden:

CGFloat width; 
    if ([[UIDevice currentDevice].systemVersion floatValue] < 7.0) 
    { 
     width = [text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0 ]].width; 
    } 
    else 
    { 
     width = ceil([text sizeWithAttributes:@{NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:16.0]}].width); 
    } 

Funktion Mit ceil() auf Ergebnis sizeWithAttributes: wird von Apple-Dokumentation empfohlen:

„Diese Methode gibt fraktionierte Größen; eine zurück Größe zu verwenden, um Sie müssen den Wert mithilfe der Ceil-Funktion auf die nächsthöhere Ganzzahl erhöhen. "

sizeWithAttributes

+0

Was ist der Sinn es auf die alte Art und Weise zu tun? Warum nicht immer sizeWithAttributes verwenden? – clocksmith

1

nur verwenden, wenn Sie aus Ihrer Sicht oder xib oder Zelle

[LBl sizeToFit]; 

Wenn es nicht dann

dispatch_async(dispatch_get_main_queue(), ^{ 
[LBl sizeToFit]; 
}); 
Überprüfen Sie für die zweite meine Antwort
+0

Aktualisierung der Benutzeroberfläche auf dem Haupt-Thread ist hier der Schlüssel. Selbst wenn wir keine Blöcke verwenden, ist es wichtig, dass alle Updates im Hauptthread stattfinden. –

4
// In swift 2.0 
    let lblDescription = UILabel(frame: CGRectMake(0, 0, 200, 20)) 
    lblDescription.numberOfLines = 0 
    lblDescription.text = "Sample text to show its whatever may be" 
    lblDescription.sizeToFit() 

    // Its automatically Adjust the height 
+0

Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. – SmokeDispenser

+1

@Vinayak mahadev bieten einige Erklärung über das Code-Snippet – user23790

+0

Hallo SmokeDispenser, Just geben lblDescription.sizeToFit() Automatisch wird es UILabel Höhe erweitern.Wir brauchen nichts zu berechnen. – Vinayak

Verwandte Themen