Ich habe ein Etikett in meine NIB-Datei eingefügt, dann muss es für dieses Etikett oben links ausgerichtet sein. Da ich zur Laufzeit Text bereitstelle, ist es nicht sicher, wie viele Zeilen vorhanden sind. Wenn Text nur eine einzelne Zeile enthält, wird er vertikal mittig ausgerichtet angezeigt. Diese Ausrichtung stimmt nicht mit meinem jeweiligen Etikett davor überein.
Beispielsweise:
Was seltsam aussieht :(
Gibt es eine Möglichkeit, den Beschriftungstext auf die Ausrichtung oben links einzustellen?
Antworten:
Anstatt es noch einmal zu erklären, werde ich auf diese ziemlich umfangreiche und hoch bewertete Frage / Antwort verweisen:
Richten Sie den Text innerhalb eines UILabels vertikal nach oben aus
Die kurze Antwort lautet: Nein, Apple hat dies nicht einfach gemacht, aber es ist möglich, die Rahmengröße zu ändern.
quelle
Das ist ziemlich einfach. Erstellen Sie eine
UILabel
Unterklasse mit einerverticalAlignment
Eigenschaft und überschreiben Sie diesetextRectForBounds:limitedToNumberOfLines
, um die korrekten Grenzen für eine vertikale Ausrichtung oben, in der Mitte oder unten zurückzugeben. Hier ist der Code:SOLabel.h
SOLabel.m
quelle
bounds.size.width
anstelle vonrect.size.width
intextRectForBounds:limitedToNumberOfLines:
scheint dies zu beheben.Ich habe eine Lösung mit AutoLayout in StoryBoard gefunden.
1) Setzen Sie die Anzahl der Zeilen auf 0 und die Textausrichtung auf Links.
2) Stellen Sie die Höhenbeschränkung ein.
3) Die Höhenbeschränkung sollte in Beziehung stehen - kleiner als oder gleich
4)
Ich habe das Ergebnis wie folgt erhalten:
quelle
viewWillLayoutSubviews
in der Steuerung oder der Zellendatei? Wenn der Controller, wie greift er von der Zelle aus auf das UILabel zu?Das SOLabel funktioniert bei mir.
Swift 3 & 5:
Diese Version wurde vom Original aktualisiert, um die Unterstützung von RTL-Sprachen zu ermöglichen:
Swift 1:
quelle
In meinem Fall handelte es sich um ein
bottom space
Einschränkungsproblem. Ich hatte es eingestellt= 16
.Als ich es einstellte,
bottom to >= 16
wurde dieses Problem gelöst.Wenn das Etikett eine Höhenbeschränkung enthält, müssen Sie diese entfernen.
Hier ist die Einschränkungsansicht meines Etiketts im Größeninspektor:
quelle
In deinem Code
Beachten Sie, dass Sie, wenn Sie dies in Tabellenzellen oder anderen Ansichten verwenden, die mit unterschiedlichen Daten recycelt werden, den ursprünglichen Frame irgendwo speichern und zurücksetzen müssen, bevor Sie sizeToFit aufrufen.
quelle
Ich habe eine andere Lösung für das gleiche Problem gefunden. Ich habe
UITextView
stattUILabel
undeditable()
Funktion umgeschaltetfalse
.quelle
Ich hatte auch dieses Problem, aber was ich fand, war die Reihenfolge, in der Sie die Eigenschaften und Methoden des UILabels festlegen!
Wenn Sie
[label sizeToFit]
vorher anrufen,label.font = [UIFont fontWithName:@"Helvetica" size:14];
wird der Text nicht nach oben ausgerichtet, aber wenn Sie sie vertauschen, ist dies der Fall!Mir ist auch aufgefallen, dass das Festlegen des Textes zuerst einen Unterschied macht.
Hoffe das hilft.
quelle
Legen Sie bei Verwendung des Interface Builder die Einschränkungen für Ihre Beschriftung fest (stellen Sie sicher, dass Sie auch die Höhe und Breite festlegen). Überprüfen Sie dann im Größeninspektor die Höhe des Etiketts. Dort soll es> = statt = lauten. Setzen Sie dann in der Implementierung für diesen Ansichts-Controller die Anzahl der Zeilen auf 0 (kann auch in IB durchgeführt werden) und setzen Sie das Label [label sizeToFit]; Wenn Ihr Text an Länge gewinnt, wird die Beschriftung höher und Ihr Text bleibt oben links.
quelle
Wenn Sie nicht bearbeitbaren Text benötigen, der standardmäßig in der oberen linken Ecke beginnt, können Sie einfach eine Textansicht anstelle einer Beschriftung verwenden und den Status wie folgt auf nicht bearbeitbar setzen:
Viel einfacher als mit den Etiketten herumzuspielen ...
Prost!
quelle
Lösung mit SoLabel funktioniert, danke.
Unten habe ich eine Monotouch-Version hinzugefügt:
quelle
Der einfachste und einfachste Weg besteht darin, die Beschriftung in StackView einzubetten und die Achse von StackView auf Horizontal und die Ausrichtung im Attributinspektor vom Storyboard nach oben zu setzen, wie hier gezeigt .
quelle
Aufbauend auf der großartigen Antwort von totiG habe ich eine IBDesignable-Klasse erstellt, mit der sich die vertikale Ausrichtung eines UILabels direkt vom StoryBoard aus ganz einfach anpassen lässt. Stellen Sie einfach sicher, dass Sie die Klasse Ihres UILabels im StoryBoard-Identitätsinspektor auf 'VerticalAlignLabel' setzen. Wenn die vertikale Ausrichtung nicht wirksam wird, gehen Sie zu Editor-> Alle Ansichten aktualisieren, um den Trick auszuführen.
So funktioniert es: Sobald Sie die Klasse Ihres UILabels richtig festgelegt haben, sollte das Storyboard ein Eingabefeld anzeigen, das eine Ganzzahl (Ausrichtungscode) enthält.
Update: Ich habe Unterstützung für zentrierte Labels hinzugefügt ~ Sev
Geben Sie 0 für Top Alignment ein
Geben Sie 1 für die mittlere Ausrichtung ein
Geben Sie 2 für die Bodenausrichtung ein
quelle
Sie können Ihr UILabel auch einfach in UITextView ändern, da diese im Grunde dasselbe tun, außer dass der Vorteil von UITextView darin besteht, dass der Text automatisch oben links ausgerichtet wird
quelle
Ich habe dieses Problem, aber mein Etikett befand sich in UITableViewCell, und im Fonds bestand der einfachste Weg, das Problem zu lösen, darin, ein leeres UIView zu erstellen und das Etikett darin mit Einschränkungen nur nach oben und nach links zu setzen Setzen Sie die Anzahl der Zeilen auf 0
quelle
Für iOS 7 habe ich das gemacht und für mich gearbeitet
quelle
Swift 2.0 :: Verwenden der UILabel-Erweiterung
Erstellen Sie konstante Aufzählungswerte in einer leeren Swift-Datei.
Verwenden der UILabel-Erweiterung:
Erstellen Sie eine leere Swift-Klasse und benennen Sie sie. Fügen Sie Folgendes hinzu.
Verwendung :
quelle
sampleLabel: UILabel?
?Swift 3-Version der Antwort von @ totiG
quelle
Die Antwort von @ totiG ist richtig und hat mein Problem gelöst. Bei der Implementierung dieser Methode ist jedoch ein Problem aufgetreten. Bei kleineren Geräten wie 5s, SE funktioniert dies bei mir nicht. Ich muss Satz
label.sizeToFit()
inoverride func layoutSubViews()
quelle
Swift 5
Es ist einfach, die Reihenfolge der Eigenschaften ist alles.
quelle
Wie stelle ich die Ausrichtung von links oben für UILabel für iOS-Anwendungen ein? Label Set Content Mode auf "Top Left" funktioniert für mich, vielen Dank:
quelle