Bedenken Sie, dass ich den folgenden Text in einer UILabel
(langen Zeile dynamischen Textes) habe:
Da die Anzahl der außerirdischen Armeen dem Team weit überlegen ist, müssen die Spieler die postapokalyptische Welt zu ihrem Vorteil nutzen, z. B. um Deckung hinter Müllcontainern, Säulen, Autos, Trümmern und anderen Objekten zu suchen.
Ich möchte die Größe ändern, UILabel's
damit der Text hineinpasst. Ich verwende die folgenden Eigenschaften von UILabel
, um den Text zum Umbrechen zu bringen.
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Bitte lassen Sie mich wissen, wenn ich nicht in die richtige Richtung gehe. Vielen Dank.
ios
cocoa-touch
uikit
uilabel
Mustafa
quelle
quelle
Antworten:
sizeWithFont constrainedToSize:lineBreakMode:
ist die zu verwendende Methode. Ein Beispiel für die Verwendung finden Sie unten:quelle
[label sizeToFit]
.sizeWithFont
in iOS 7 veraltet ist. Stackoverflow.com/questions/18897896/…Sie gingen in die richtige Richtung. Alles was Sie tun müssen ist:
quelle
In iOS 6 hat Apple eine Eigenschaft hinzugefügt UILabel , die dynamische vertikale Größenanpassung vereinfacht stark von Etiketten: preferredMaxLayoutWidth .
Die Verwendung dieser Eigenschaft in Kombination mit lineBreakMode = NSLineBreakByWordWrapping und der sizeToFit- Methode ermöglicht die einfache Größenänderung einer UILabel-Instanz auf die Höhe, die den gesamten Text enthält.
Ein Zitat aus der iOS-Dokumentation:
Eine Probe:
quelle
Überprüfen Sie diese Funktion einwandfrei, ohne eine einzelne Codezeile hinzuzufügen. (Verwenden von Autolayout)
Ich habe eine Demo für Sie gemäß Ihren Anforderungen erstellt. Laden Sie es von unten Link herunter,
Autoresize UIView und UILabel
Schritt für Schritt Anleitung :-
Schritt 1: - Setzen Sie die Einschränkung auf UIView
1) Führend 2) Top 3) Nachlauf (Aus der Hauptansicht)
Schritt 2: - Setzen Sie die Beschränkung auf Beschriftung 1
1) Führen 2) Top 3) Nachlaufen (Aus der Übersicht)
Schritt 3: - Setzen Sie die Beschränkung auf Beschriftung 2
1) Führen 2) Schleppen (Aus der Übersicht)
Schritt 4: - Am schwierigsten ist es, UILabel von UIView einen Botton zu geben.
Schritt 5: - (Optional) Setzen Sie die Einschränkung auf UIButton
1) Führend 2) Unten 3) Nachlauf 4) Feste Höhe (aus der Hauptansicht)
Ausgabe :-
Hinweis: - Stellen Sie sicher, dass Sie in der Label-Eigenschaft Anzahl der Zeilen = 0 festgelegt haben.
Ich hoffe, diese Informationen reichen aus, um Autoresize UIView entsprechend der Größe von UILabel und Autoresize UILabel gemäß Text zu verstehen.
quelle
Stattdessen können Sie dies programmgesteuert in Storyboard / XIB ausführen, während Sie entwerfen.
quelle
Vielen Dank für die Hilfe, hier ist der Code, den ich ausprobiert habe und der für mich funktioniert
quelle
Lösung für iOS7 vor und iOS7 oben
quelle
Da sizeWithFont veraltet ist, verwende ich stattdessen dieses.
Dieser erhält beschriftungsspezifische Attribute.
quelle
Hier ist eine Kategorieversion:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
quelle
Sie können die
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
Methode beispielsweise folgendermaßen implementieren :Verwenden Sie auch
NSString
diesizeWithFont:constrainedToSize:lineBreakMode:
Methode von ' , um die Höhe des Texts zu berechnen.quelle
UILabel-Erweiterung basierend auf dieser Antwort für Swift 4 und höher
Kann verwendet werden wie:
quelle
Und für diejenigen, die auf iOS 8 migrieren, gibt es hier eine Klassenerweiterung für Swift:
quelle
Der einfachste und bessere Weg, der für mich funktioniert hat, bestand darin, die Höhenbeschränkung auf das Etikett anzuwenden und die Priorität im Storyboard auf niedrig zu setzen , dh (250).
Dank des Storyboards müssen Sie sich also keine Gedanken über die programmgesteuerte Berechnung von Höhe und Breite machen.
quelle
Mein Ansatz zur Berechnung der dynamischen Höhe von UILabel.
Wrap to function:
quelle
Aktualisierte Methode
quelle
Dies ist eine Codezeile zum Abrufen der UILabel-Höhe mithilfe von Objective-c:
und mit .height erhalten Sie die Höhe des Etiketts wie folgt:
quelle
Sie können die Höhe mit dem folgenden Code ermitteln
Du musst bestehen
Text 2. Schriftart 3. Etikettenbreite
quelle
Danke für diesen Beitrag. Es hat mir sehr geholfen. In meinem Fall bearbeite ich den Text auch in einem separaten View Controller. Mir ist aufgefallen, dass ich:
in der tableView: cellForRowAtIndexPath: Methode, mit der die Beschriftungsansicht bei jeder Bearbeitung der Zelle kontinuierlich über der vorherigen Ansicht gerendert wurde. Der Text wurde pixelig und wenn etwas gelöscht oder geändert wurde, war die vorherige Version unter der neuen Version sichtbar. So habe ich das Problem gelöst:
Keine seltsamen Schichten mehr. Wenn es einen besseren Weg gibt, dies zu handhaben, lassen Sie es mich bitte wissen.
quelle
Verwenden Sie dies hier. Alle Eigenschaften werden auf dem Etikett verwendet und testen Sie es, indem Sie den Text in der Datei itemTitle.text als erhöhen
Es zeigt die perfekte Antwort nach Bedarf
quelle
Sie können es auch als Methode verwenden. @ Pyjamasam ist sehr wahr, also mache ich nur seine Methode. Es kann für jemand anderen hilfreich sein
und einfach so einstellen
quelle
Um dies in Swift3 zu tun, ist der folgende Code:
quelle
Hinzufügen zu den obigen Antworten:
Dies kann leicht über das Storyboard erreicht werden.
quelle
Eine Zeile ist Chris 'Antwort ist falsch.
sollte sein
Davon abgesehen ist es die richtige Lösung.
quelle
Endlich hat es funktioniert. Danke Jungs.
Ich habe es nicht zum Laufen gebracht, weil ich versucht habe, die Größe des Etiketts in der
heightForRowAtIndexPath
Methode zu ändern :und (yeah dumm von mir), ich habe die Größe des Etiketts auf die Standardeinstellung in der
cellForRowAtIndexPath
Methode geändert - ich habe den Code übersehen, den ich zuvor geschrieben hatte:quelle
quelle
quelle
Mein Code:
quelle
Diese Methode ergibt eine perfekte Höhe
quelle
Swift 2:
Die interessanten Zeilen stehen
sizeToFit()
in Verbindung mit dem Setzen von aframe.size.height
auf den maximalen Gleitkommawert. Dies gibt Platz für langen Text,sizeToFit()
zwingt ihn jedoch dazu, nur das Notwendige zu verwenden, ruft ihn jedoch IMMER nach dem Setzen von auf.frame.size.height
.Ich empfehle, ein
.backgroundColor
für Debug-Zwecke festzulegen. Auf diese Weise können Sie sehen, wie der Frame für jeden Fall gerendert wird.quelle
yourLabel.frame.height
ist eine Eigenschaft nur zu bekommenBitte legen Sie im Storyboard Einschränkungen für UILable fest, einschließlich oben links unten rechts
quelle