Ist es möglich, die Größe des UILabel-Felds / der Grenzen automatisch an den enthaltenen Text anzupassen? (Es ist mir egal, ob es größer als das Display ist)
Wenn also ein Benutzer "Hallo" eingibt oder "mein Name ist wirklich lang, ich möchte, dass er in dieses Feld passt", wird er niemals abgeschnitten und das Etikett wird entsprechend "erweitert"?
ios
iphone
objective-c
uilabel
Wayneh
quelle
quelle
Antworten:
Bitte überprüfen Sie meine Liste, in der ich eine Kategorie für
UILabel
etwas sehr Ähnliches erstellt habe. In meiner Kategorie kann eineUILabel
Strecke ihre Höhe anzeigen , um den gesamten Inhalt anzuzeigen : https://gist.github.com/1005520Oder lesen Sie diesen Beitrag: https://stackoverflow.com/a/7242981/662605
Dies würde die Höhe dehnen, aber Sie können es leicht ändern, um in die andere Richtung zu arbeiten und die Breite mit so etwas zu dehnen. Ich glaube, was Sie tun möchten:
Sie können einfacher die in
sizeToFit
derUIView
Klasse verfügbare Methode verwenden , aber die Anzahl der Zeilen aus Sicherheitsgründen auf 1 setzen.iOS 6 Update
Wenn Sie AutoLayout verwenden, verfügen Sie über eine integrierte Lösung. Wenn Sie die Anzahl der Zeilen auf 0 setzen, ändert das Framework die Größe Ihrer Beschriftung entsprechend (indem Sie mehr Höhe hinzufügen), um sie an Ihren Text anzupassen.
iOS 8 Update
sizeWithFont:
ist veraltet, verwenden SiesizeWithAttributes:
stattdessen:quelle
Mit
[label sizeToFit];
wird das gleiche Ergebnis aus der Daniels-Kategorie erzielt.Obwohl ich empfehle, Autolayout zu verwenden und die Größe des Etiketts aufgrund von Einschränkungen ändern zu lassen.
quelle
Wenn wir möchten, dass
UILabel
das basierend auf der Textgröße verkleinert und erweitert wird, ist ein Storyboard mit Autolayout die beste Option. Nachfolgend finden Sie die Schritte, um dies zu erreichenSchritte
Setzen Sie UILabel in den View Controller und platzieren Sie es, wo immer Sie wollen. Auch
0
fürnumberOfLines
Eigentum von setzenUILabel
.Geben Sie die Beschränkung für Top-, Leading- und Trailing-Space-Pins ein.
Update Frame
und klicken Sie aufFix Misplacement
. Jetzt wird dieses UILabel verkleinert, wenn der Text kleiner ist, und erweitert, wenn der Text mehr ist.quelle
Dies ist nicht so kompliziert wie einige der anderen Antworten.
Stecken Sie die linken und oberen Kanten fest
Verwenden Sie einfach das automatische Layout, um Einschränkungen hinzuzufügen, um die linke und obere Seite des Etiketts zu fixieren.
Danach wird die Größe automatisch geändert.
Anmerkungen
Bei
sizeToFit
Verwendung des automatischen Layouts ist keine Einstellung erforderlich . Mein vollständiger Code für das Beispielprojekt ist hier:myLabel.preferredMaxLayoutWidth = 150 // or whatever
Code hinzu. (Ich habe meinen Knopf auch am unteren Rand des Etiketts befestigt, damit er sich nach unten bewegt, wenn die Etikettenhöhe zunimmt.)UITableViewCell
sehen Sie diese Antwort .quelle
Verwenden Sie
[label sizeToFit];
diese Option, um den Text in UILabel anzupassenquelle
Ich habe einige Methoden basierend auf Daniels Antwort oben erstellt.
quelle
Folgendes finde ich für meine Situation:
1) Die Höhe des UILabel hat eine Einschränkung von> = 0 bei Verwendung des automatischen Layouts. Die Breite ist fest. 2) Weisen Sie den Text dem UILabel zu, das zu diesem Zeitpunkt bereits eine Übersicht hat (nicht sicher, wie wichtig das ist). 3) Dann machen Sie:
Die Höhe des Etiketts ist jetzt entsprechend eingestellt.
quelle
Dies ist eine Kategoriemethode. Sie müssen zuerst Text festlegen und dann diese Methode aufrufen, um die Höhe von UILabel anzupassen.
quelle
Sie können die Größe Ihres Etiketts nach Text und anderen zugehörigen Steuerelementen auf zwei Arten anpassen:
Für iOS 7.0 und höher
vor iOS 7.0 konnte dies zur Berechnung der Etikettengröße verwendet werden
// andere Steuerelemente basierend auf labelTextHeight neu gestalten
Wenn Sie die Größe des Etikettentextes nicht berechnen möchten, können Sie -sizeToFit für die Instanz von UILabel as- verwenden.
// Danach können Sie den Beschriftungsrahmen dazu bringen, andere verwandte Steuerelemente neu zu gestalten
quelle
[label sizeToFit];
in viewDidLoad hinzuquelle
Ich hatte große Probleme mit dem automatischen Layout. Wir haben zwei Container in der Tabellenzelle. Die Größe des zweiten Containers hängt von der Artikelbeschreibung ab (0 - 1000 Zeichen), und die Größe der Zeile sollte basierend darauf geändert werden.
Die fehlende Zutat war die unterste Einschränkung für die Beschreibung.
Ich habe die untere Einschränkung des dynamischen Elements von = 0 auf > = 0 geändert .
quelle
Passt immer! :) :)
quelle
Sie können eine Zeilenausgabe anzeigen und dann die Eigenschaft Line = 0 und die Ausgabe mehrerer Zeilen anzeigen und dann die Eigenschaft Line = 1 und mehr festlegen
quelle
Es gibt auch diesen Ansatz:
quelle
changeTextWithAutoHeight:width:
Methode sehen kannUILabel
. Könnten Sie bitte einen Link angeben, wo in der UIKit-Dokumentation diese Methode zu finden ist?