2017-03-21 3 views
0

Ich habe zwei Label nebeneinander "Label 1" und "Label 2". Wenn der Inhalt von "Label 1" nicht verfügbar ist, ersetzen Sie "Label 2" durch die Position "Label 1". Weiß jemand, wie es möglich ist, das automatische Layout zu verwenden? enter image description hereSo ändern Sie die Etikettenposition mit Auto-Layout

Für den Versuchszweck habe ich Höhe und Gewicht für beide Etiketten festgelegt. "Label 1" hat einen führenden und oberen 8 Pixel Rand, während "Label 2" 0 Pixel für einen führenden und 8 Pixel für einen oberen Rand hat. Stellen Sie "Label 1" Größe auf "0", ausblenden "Label 1", aber es funktioniert nicht.

+0

Nimm 'IBOutlet' von' Label 2 width' und setzen Sie den 'entsprechend constant' Wert. –

+0

Sie können es mit Steckdosen machen .. nur Breite Einschränkung Ausgang machen und wenn Etikett 1 leer dann setzen Sie seine Konstante auf 0 –

+0

Benötigen Sie die große, feste Breite? Oder möchten Sie, dass die Beschriftungen automatisch an den Text angepasst werden? – DonMag

Antwort

1

Entfernen Sie die Breitenbeschränkung für beide Etiketten, und aktualisieren Sie die Komprimierung/Anpassungspriorität für Etiketten entsprechend Ihrer Anforderung (vom Größeninspektor).

Durch Entfernen der Breitenbeschränkung wird Ihr Problem gelöst, aber AutoLayout kann einen Konflikt für die Inhaltsanzeigepriorität aufweisen, weil Ihre beiden Etiketten horizontal in derselben Linie (Punkte) positioniert sind. Um diesen Konflikt zu beheben, müssen Sie die Komprimierungs-/Umgehungspriorität einer der beiden Bezeichnungen aktualisieren.

Jetzt, wenn es keinen Wert für einen (oder beide) Beschriftungstext gibt, setze nil Wert dafür, so dass sein Rahmen (Leerzeichen) automatisch von einem anderen Etikett belegt wird. Und wenn beide Beschriftungstexte keinen Wert haben, sind beide verschwunden (die Breite wird automatisch auf Null gesetzt).

enter image description here

+0

Ich habe deine Schritte verfolgt, aber es zeigt mir keine Konflikte. – nadim

+0

Haben Sie für Etikett 1 führendes Konstanzzeichen gesetzt? Ist Ihr Problem gelöst oder steht Ihnen dieses Problem noch bevor? Durch das Entfernen der Breite wird Ihr Problem gelöst. Legen Sie nur den Wert nil für den Beschriftungstext fest, wenn Sie die Beschriftung nicht anzeigen möchten. – Krunal

+1

Vielen Dank, das Problem ist gelöst. – nadim

1

Wenn beide Etiketten eine feste Breite haben, legen Sie für beide Etiketten eine konstante Breite fest. Das führende Leerzeichen von Lable2 ist '0' in Bezug auf Label1. Fügen Sie der Breite Label1 einen NSLayoutConstraint hinzu. Wenn Sie nun feststellten, dass der Inhalt von Lable1 leer ist, legen Sie programmatisch seine Breiten-Layoutbeschränkung auf '0' fest. Lable2 wird automatisch nach links verschoben und befindet sich an der Stelle von Label1.

+0

"Konstante Breite auf beide Etiketten einstellen" bedeutet dies gleiche Breite für beide Etiketten? – nadim

+0

Das basiert auf Ihrer Anforderung. Wenn das Etikett eine feste Länge der Zeichenfolge enthält, legen Sie den Wert für die konstante Breite fest. Wenn das Etikett die variable/dynamische Länge der Zeichenfolge enthält, legen Sie den Breitenwert proportional fest. Aber ich empfehle, mit Krunal Antwort unten erwähnt zu gehen. –

+0

ok, vielen Dank für Ihre Antwort. – nadim

0

Sie benötigen einen IBOutlet Breitenbeschränkung von Label2 zu erstellen, und Sie müssen für den Inhalt von Label1 zu überprüfen. Wenn Sie es leer vorfanden, müssen Sie mit Null setzen und layoutIfNeeded aufrufen, um den Ansichtsrahmen zurückzusetzen.

0

Wenn Sie nicht mit Kompression/Umarmen Eigenschaften arbeiten möchten. Dann können Sie Etiketten in die Stapelansicht einbetten und die Beschriftung ausblenden, wenn kein Inhalt vorhanden ist.

enter image description here

Und wenn ich verstecken label1

enter image description here

erforderlich Keine Einschränkungen :)

Verwandte Themen