2017-03-08 3 views
2

Ich habe ein paar Etiketten, die sich nie gegenseitig berühren sollten. Siehe das Bild unten (die gelben Buchstaben ignorieren):Auto schrumpfen UILabel, wenn andere UILabel wächst

labels

Dies sind 4 Etikett insgesamt 2 Spielernamen und 2 Partituren. Der Name des Players ersetzt den ursprünglichen Player-Label-Text. So könnte "Player 1:" ein beliebiger Text in beliebiger Breite sein. Die Beschriftungen befinden sich in einer Ansicht in einer UIStackView. Jeweils 2 Labels (also Spieler Name und Punktzahl) hat seine eigene View. In diesem Beispiel gibt es 4 Labels in 2 Ansichten in 1 UIStackView. Das ist, was ich will:

Die Punktzahl Etiketten werden nie automatisch schrumpfen, sie behalten immer ihre ursprüngliche Höhe und würde automatisch in der Breite erhöhen, wenn der Inhalt (Score) wachsen wird. Aus diesem Grund habe ich die Content-Umgehungspriorität auf größere Werte als das Spielernamen-Label festgelegt. Da ich nicht möchte, dass die Scoremarkierung automatisch schrumpft, setze ich die Widerstandskorrektur für die Inhaltskomprimierung auf einen größeren Wert als den des Spielernamensschilds.

Ich setze den Spielernamen Beschriftungstext auf eine automatische Schrumpfwertskala auf 0,5. Doch wenn ein großer Benutzernamen dargestellt wird, scheint es, über die Partitur Label wie folgt aus (habe ich die ursprüngliche blaue „0“ jetzt gelb):

error

Der Benutzername sollte automatisch schrumpfen, und sollte nie die berühren Punktzahl Label. Wie kann ich das machen?

Ich hoffe, Sie können helfen!

Edit: Ich möchte ein Leerzeichen zwischen den Spielernamen und Spieler Score Label hinzufügen. Um dies zu tun, möchte ich ein nachstehendes Leerzeichen vom Spielernamen zu den Spielern hinzufügen. Wenn Sie diese Einschränkung jedoch hinzufügen, wird auch die gesamte Punktzahl berücksichtigt. Ich möchte natürlich aufhören, wenn es das Notenlabel berührt. Bild 1 zeigt hier die Größe des Spielernamens, wenn das nachgestellte Leerzeichen zur Notenbeschriftung hinzugefügt wurde. Es nimmt den Score-Label Swell auf. :

playersname

Und die constrain: ss

Ich möchte nicht fixiert Constraints verwenden, da die Probleme verursachen würde es auf einem iPad oder iPhone SE läuft. Vielen Dank.

+0

Das 'UIStackView' darf die Inhaltskomprimierung oder das Umarmen von Eigenschaften nicht verwenden. Es verwaltet auch den Stapel Ansichten selbst (ohne sich wirklich um das automatische Layout zu kümmern). Ich denke, es wäre besser, wenn Sie die Beschriftungen direkt in die Ansicht einfügen und alles ohne Auto-Layout bearbeiten. – keithbhunter

+0

Ja, es ist in Auto-Layout, in einem UIStackview gestapelt. Ich habe keine Ahnung, wie ich diese besondere Sache machen soll. Auto-Layout wird die Größe von Labels nicht automatisch ändern, abhängig von anderen UILabels – Petravd1994

+0

Ich würde nicht glauben, dass UIStackView keine Inhaltsumwandlung von Labels darin unterstützt. Ich werde auf andere Antworten warten, bevor ich meinen ganzen Code ändere – Petravd1994

Antwort

2

Um dies zu erreichen, ziehen Sie 1 UIView auf das Storyboard oder xib. Ziehen Sie 2 UILabels in diese Ansicht und legen Sie sie nebeneinander. Fügen Sie der linken/führenden Beschriftung obere, untere, führende und nachstehende Einschränkungen hinzu. Das Nachlaufende wird etwas Platz zwischen den UILabels geben. Fügen Sie der zweiten Beschriftung obere, untere und nachstehende Einschränkungen hinzu. Ändern Sie nun die erste (linke/führende Beschriftung zu Autoshrink (Mindestschriftgröße 0,5). Ändern Sie auch die führende Beschriftung-Content Hugging (Horizontal-252, Vertical 251). Klicken Sie nun auf die rechte/nachfolgende Beschriftung und ändern Sie Content Hugging (horizontal). 251, Vertical 251) und noch wichtiger Inhalt Kompressionswiderstand Priorität auf 1000 vertikal und horizontal.Wählen Sie nun die Ansicht mit diesen Beschriftungen.Kommandieren C und kopieren Sie irgendwo außerhalb Befehl V. Jetzt wählen Sie beide Ansichten und gehen Sie bis zum oberen Menü in Xcode und wählen Sie Editor und -> Einbetten in -> UIStackView Setzen Sie die Stapelansicht auf Alignment .Center und Fill. Fügen Sie den 2 Ansichten, die die Beschriftungen in der Stapelansicht enthalten, gleiche Höhen und gleiche Breiten hinzu. , führende, nachlaufende Constraints für die Stapelansicht zu ihrer Superansicht.Passieren Sie führende und nachfolgende für Beschriftungen, um eine Auffüllung hinzuzufügen.Um zwischen den beiden Ansichten, die die Beschriftungen innerhalb der Stapelansicht enthalten, eine Auffüllung hinzuzufügen, fügen Sie eine Ansicht dazwischen hinzu und legen die Breitenbeschränkung fest oder fest Prozent Alter von super, was Sie wollen) auf die gewünschte Polsterung.

+0

Danke! Es funktioniert fast jetzt. Weil ich Constrains mit festen Zahlen nicht hinzufügen kann (wenn du den Spielernamen eingibst um zu punkten, hat er eine feste Zahl wie 100), aber wenn ich das Label meines Spielers auf die Scoreretikette ziehe und "trailing" hinzufüge, wird es hinzugefügt die Einschränkung, aber nach dem Etikett. Weißt du, wie man einen Abstand zwischen den Etiketten einstellt? Ich werde es mit einem Bild aktualisieren, wenn Sie antworten könnten, dass Sie eine erstaunliche Arbeit gemacht haben :) – Petravd1994

+0

Ich werde nur ein Beispiel auf GitHub von dem, was ich erklärte, und Sie können sehen, ob es funktioniert. Gib mir nur ein paar – agibson007

+0

Schauen Sie sich das an. Sollte wie beschrieben sein. Wenn dies das ist, was Sie erreichen möchten, markieren Sie bitte die Antwort richtig. https://github.com/agibson73/StackViewHorizontal – agibson007