2013-03-07 9 views
7

Ich habe eine UILabel und ich möchte es so festlegen, dass es eine feste Breite und variable Höhe abhängig von seiner text anstatt seiner superView hat.NSLayoutConstraint für ein UILabel, um zusätzliche Zeilen zu "wachsen"

, d. H. Wenn die text "Hallo Welt" ist. dann wird das Label ...

------------------------ 
|Hello World.   | 
------------------------ 

sein, und wenn die text ist: „Das ist etwas sehr langer Text, der über mehrere Zeilen geht.“ Dann wird das Label sein ...

------------------------ 
|This is some very long| 
|text that goes over | 
|several lines.  | 
------------------------ 

Ich habe bereits festgelegt, die feste Breite ein NSLayoutConstraint mit und ich habe numberOfLines-0 gesetzt, aber es hält nur eine Zeilenhöhe und verkettet den Text mit Auslassungspunkten.

Ich weiß, dass es etwas namens "contentResistance" oder etwas gibt, aber ich bin mir nicht sicher über den Namen oder wie man es benutzt.

Ist das möglich?

Antwort

10

Sie müssen die preferredMaxLayoutWidth des Etiketts auf Ihre feste Breite einstellen. Ich weiß nicht, warum es das nicht für sich selbst herausfinden kann, da Sie auf eine Breite beschränkt sind, aber da gehen Sie.

Wenn in einem Autolayout Welt eine feste Größe fühlt sich falsch einstellen zu müssen (was es soll!), Dann Sie den Wert aus der Breite des Labels festlegen nach Layout aufgetreten ist, in viewDidLayoutSubviews. Achten Sie darauf, in diesem Fall nicht in eine Endlosschleife zu geraten, in der Ihr Layout ungültig wird.

+1

Dies funktioniert dank. Es fühlt sich jedoch falsch an, AUTO-Layout zu haben und einem UILabel eine bevorzugte Breite zu geben. Die "feste" Breite des Labels, die ich habe, hängt von der Breite seines superView ab. Die preferredMaxLayoutWidth ist jetzt jedoch eine Konstante. Naja, in diesem Fall ändert sich der superView nicht, also ist es egal, lol. – Fogmeister

+1

Ich stimme zu! Für ein dynamischeres Layout können Sie den Wert in viewDidLayoutSubviews festlegen und außerhalb der Grenzenbreite basieren. – jrturton

-2

Dieser Code Versuchen Sie es hilfreich für Sie möglicherweise>

[email protected]"haiiiiiiiii"; 

    UIFont *cellFont=[UIFont fontWithName:@"Helvetica" size:12.0]; 
    CGSize constraintSize=CGSizeMake(250,MAXFLOAT); 
    CGSize txtViewSize=[label.text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap]; 

yourlabelname.numberOfLines = 0;

CGRect Frame = IhrLabelname.frame;

+1

Ich verwende AutoLayout, so dass ich den Rahmen nicht direkt ändern kann. Trotzdem danke. – Fogmeister

Verwandte Themen