Ich habe einige Beschriftungen, deren Höhe ich an den Text anpassen möchte. Dies ist der Code, den ich jetzt dafür geschrieben habe
func heightForView(text:String, font:UIFont, width:CGFloat) -> CGFloat{
let label:UILabel = UILabel(frame: CGRectMake(0, 0, width, CGFloat.max))
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.ByWordWrapping
label.font = font
label.text = text
label.sizeToFit()
return label.frame.height
}
BEARBEITEN:
Das Problem war nicht in diesem Code enthalten, daher liegt mein Fix in der Frage selbst. Es könnte immer noch für andere nützlich sein!
sizeWithFont
möglicherweise nicht für Swift verfügbar,String
aber es ist verfügbar fürNSString
Sie sollten es trotzdem aufrufen können.Antworten:
Ich habe das gerade auf einen Spielplatz gestellt und es funktioniert für mich.
Aktualisiert für Swift 4.0
Swift 3:
quelle
UILabel
Größe zu erstellen . Wenn diese Methode im Inneren verwendet wirdlayoutSubviews
und die Tendenz besteht, mehrmals pro vollständigem Layout aufgerufen zu werden, kann die zusätzliche Objekterstellung zu merklichen Verzögerungen führen, insbesondere beim Scrollen.Wenn Sie AutoLayout verwenden , können Sie die
UILabel
Höhe nur über die Konfigurationsoberfläche anpassen .Für iOS8 oder höher
UILabel
UILabel
von 1 auf 0Für iOS7
UILabel
Equal
zuGreater than or Equal
UILabel
1 bis 0Ihr
UILabel
Wille automatisch erhöht Höhe je nach Textquelle
Ich erstelle diese Erweiterung, wenn Sie möchten
quelle
Ich habe eine starke Arbeitslösung.
in layoutSubviews:
im Textsetzer:
UPD. Natürlich mit diesen UILabel-Einstellungen:
quelle
Nur durch Einstellen:
Das Etikett passt seine Höhe automatisch an die eingegebene Textmenge an.
quelle
Basierend auf Anoraks Antwort stimme ich auch Zorayrs Besorgnis zu. Deshalb habe ich ein paar Zeilen hinzugefügt, um das UILabel zu entfernen und nur das CGFloat zurückzugeben. Ich weiß nicht, ob es hilft, da der ursprüngliche Code das UIabel nicht hinzufügt, aber es wirft keinen Fehler, daher verwende ich den folgenden Code:
quelle
In Swift 4.1 und Xcode 9.4.1
Nur 3 Schritte
Schritt 1)
Schritt 2)
Schritt 3)
quelle
Die von Anorak als berechnete Eigenschaft in einer Erweiterung für UILabel vorgeschlagene Lösung:
Verwendung:
quelle
Nach der Antwort von @Anorak habe ich diese Erweiterung zu String hinzugefügt und einen Einschub als Parameter gesendet, da Sie häufig eine Auffüllung Ihres Textes benötigen. Wie auch immer, vielleicht finden Sie einige nützlich.
quelle
Hier erfahren Sie, wie Sie die Texthöhe in Swift berechnen. Sie können dann die Höhe vom Rechteck abrufen und die Einschränkungshöhe des Etiketts oder der Textansicht usw. festlegen.
quelle
Rufen Sie einfach diese Methode auf, wenn Sie eine dynamische Höhe für die Beschriftung benötigen
quelle
Swift 4.0
self.messageLabel = UILabel (Frame: CGRect (x: 70, y: 60, Breite: UIScreen.main.bounds.width - 80, Höhe: 30)
Dieser Link beschreibt die Storyboard-Methode, um dasselbe zu tun
quelle
Swift 4.0
Anstatt die Text- / Beschriftungshöhe zu berechnen, ändere ich die Größe der Beschriftung nach dem Einfügen des (dynamischen) Textes.
Angenommen, myLabel ist das betreffende UILabel:
Und jetzt kommt der lustige Teil:
quelle
Die Swift 4.1- Erweiterungsmethode zur Berechnung der Etikettenhöhe:
quelle
Swift 5, XCode 11 Storyboard Weg. Ich denke, das funktioniert für iOS 9 und höher. Führen Sie die folgenden Schritte aus, damit beispielsweise die Bezeichnung "Beschreibung" die dynamische Höhe erhält:
1) Beschreibungsbeschriftung auswählen -> Zum Attributinspektor (Stiftsymbol) gehen und Folgendes festlegen: Zeilen: 0 Zeilenumbruch: Zeilenumbruch
2) Wählen Sie Ihr UILabel aus dem Storyboard aus und gehen Sie zum Größeninspektor (Linealsymbol). 3) Gehen Sie für alle anderen UIView-Komponenten (Etiketten, Schaltflächen, Bildansicht usw.), die mit Ihrem Etikett interagieren, zu "Priorität für Inhaltskomprimierungswiderstand 1".
Zum Beispiel habe ich UIImageView, Title Label und Description Label vertikal in meiner Ansicht. Ich habe die Prioritätspriorität für die Inhaltskomprimierung auf UIImageView und die Titelbezeichnung auf 1 und für die Beschreibungsbezeichnung auf 750 festgelegt. Dadurch wird eine Beschreibungsbezeichnung so erstellt, dass sie die erforderliche Höhe annimmt.
quelle
Um das Etikett schnell dynamisch zu machen, geben Sie keine Höhenbeschränkung an und geben Sie im Storyboard die Anzahl der Zeilen 0 für das Etikett an. Dies ist die beste Art und Weise, wie ich dynamisches Etikett gemäß seiner Inhaltsgröße handhabe.
quelle
Sie können auch die
sizeThatFits
Funktion verwenden.Beispielsweise:
label.sizeThatFits(superView.frame.size).height
quelle