2015-08-28 26 views
8

Ich habe eine UILabel für Artikelbeschreibung unter anderen Ansichten, alle mit Einschränkungen in Interface Builder ausgelegt - Sie können alle relevanten Einschränkungen in der Abbildung unten sehen. Die Anzahl der Zeilen ist ebenfalls auf 0 eingestellt.AutoLayout Einstellung UILabel Höhe auf Null

enter image description here

Ich habe nicht die Höhe Zwang gesetzt, weil ich die UILabel wollen basierend auf den Text, um die Größe enthält. Statt dessen, was passiert ist, direkt nach

[self.view layoutIfNeeded]; 

genannt wird, wird die Höhe des UILabel auf 0 gesetzt. Auch wenn ich keinen anderen Text auf die UILabel setzen, hat es einen Standardwert von Element Beschreibung in Interface Builder festgelegt.

Die Bezeichnung der Artikelbezeichnung oben ist auf die gleiche Weise eingestellt, aber diese wird nicht auf 0 gequetscht, also bin ich etwas verwirrt.

Jeder hatte irgendeine Erfahrung mit einem solchen Verhalten?

+0

Haben Sie in der Konsole AutoLayout-Constraint-Fehler? AutoLayout einige Einschränkungen aufgrund von Konflikten fallen lassen? – Alex

+0

Nein, überhaupt kein – artooras

+0

Ich weiß, dass du keine Höhe zu diesem UILabel hardcore willst, aber was passiert wenn du das tust? Erhalten Sie irgendwelche AutoLayout-Constraint-Konflikte in der Konsole? – Alex

Antwort

10

schaffte ich es zu lösen, indem die UILabel ‚s vertical compression resistance priority-1000 (Standard 750) im Interface Builder zu setzen.

enter image description here

Da meine Ansichten in einer anderen Ansicht eingebettet sind, und die Unterseite der übergeordneten Ansicht ist abhängig von der Unterseite der untersten Kind Ansicht, ich nur spekulieren, dass die UILabel ohne Höhenbeschränkung wurde dabei gequetscht zu werden die Ansichten auslegen. Wahrscheinlich würde das Spielen mit Prioritäten anderer Beschränkungen irgendwo in der Kette das gleiche Ergebnis ergeben, aber ich konnte es nicht erfolgreich machen. Die obige Lösung hat jedoch funktioniert, was in meinem Fall gut genug ist.

Ich hoffe, das hilft jemandem.

0

Set 3 constraint

1.Leading Raum

2.Trailing Raum Super

3.Top Raum Super

dann

@property (nonatomic, strong) IBOutlet UILabel *lbl; 

- (void) viewDidLoad{ 
    [self.lbl sizeToFit]; 
} 
+1

Meine Constraints sind wie von Ihnen vorgeschlagen, außer dass ich auch den unteren brauche, um andere Views nach unten zu schieben, wenn das Label zu groß wird. Es gelang mir jedoch, mein Problem zu lösen, indem ich die vertikale Komprimierungswiderstandspriorität von UILabel auf 1000 (Standard 750) festlegte. – artooras

0

ctrl an Super Ziehen Sie vom Label zu sich selbst> wählen Sie die Höhe> setzen Sie die Konstante nt der Höhe auf 0 und ändert gleich (==) auf mehr als oder equeal (> =)

+0

Dies stellte nur sicher, dass es hoch genug für mindestens eine Textzeile ist, aber der Rest ist abgeschnitten, dh das Label hat keine Autoresize – artooras

+0

Stellen Sie sicher, dass die untere Einschränkung richtig ist, denn dies ist der Weg :-) Edit: Probieren Sie es aus, indem Sie die untere Einschränkung entfernen, um es zu testen. –

+0

Ok, es scheint so, als hättest du es behoben, indem du die Umarmung auf 1000 änderst. War das der Grund, dass du meine Beschränkung hinzugefügt hast oder etwas, das du hinzugefügt hast? So oder so, überprüfen Sie etwas als die richtige Antwort. –

0

Ich glaube, Sie 5 Einschränkungen auf dem Etikett festlegen müssen:

  • Raum führen zu Super
  • Raum Nachgestellte
  • Vertikal Raum "Item"
  • Vertikal Raum "Name"
  • Höhe
zu Super

Dann fügen Sie ein IBOutlet in Ihrem Controller auf der Constraint-Höhe (sagen wir LabelHeight).

Also in Ihrem viewDidLoad können Sie diese Einschränkung Wert setzen:

@property (weak, nonatomic) IBOutlet UILabel *label; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *labelHeight; 


- (void) viewDidLoad{ 
    [self.label sizeToFit]; 
    labelHeight.constant = self.label.frame.size.height; 
} 
1

AutoLayout in diesem UIViewController können nicht alle erfüllen die constraints Sie haben festgelegt, damit die auf Ihrem UILabel, es in abtun resultierende ein komprimierter Zustand Sie sollten sich die anderen constraints in Ihrer UIViewController ansehen und die priority der height contraint auf eine höhere Nummer setzen.

Verwandte Themen