So erstellen Sie ein multi-line-UILabel, mit einer maximalen Breite?
Schreibe ich eine einfache IRC-client, ich bin Modellierung nach der Twitter-iOS-app Aussehen. Ich habe ein screenshot der Twitter-app für Referenz:
Sieht es aus wie eine einfache Tabelle anzeigen mit einem paar von Etiketten in jeder Zelle. Also, in meiner app, ich bin programmgesteuert erstellen einer Tabelle und die Zelle formatieren. Meine benutzerdefinierte Zelle hat nur zwei labels, die ich habe, positioniert eine auf der Oberseite des anderen. Das top-label ist ein einfaches 1-liner. Die Beschriftung unten " ich möchte enthalten mehr Nachrichten, und es brauchen zu Wort-auf mehrere Zeilen umgebrochen werden, während Sie im Rahmen meiner angegebenen Breite.
Wie kann ich das erreichen?
So weit, ich habe versucht, explizit festlegen des Rahmens der Bezeichnung auf den Dimensionen, die ich will, aber es keinen Zeilenumbruch, wenn das ist alles, was ich tun. Es fließt einfach aus der Zelle horizontal. Ich habe dann versucht, Sie anzurufen sizeToFit
innerhalb der tableView:cellForRowAtIndexPath:
Funktion, für das label, aber es scheint zu word-wrap in einer sehr kleinen Breite - der text wird automatisch umbrochen, nach so zwei oder drei Buchstaben und dann strömt aus der Zelle vertikal.
Ich kann nicht scheinen, um herauszufinden, wie man den text in die label-wrap-nach einer festgelegten Breite. Irgendwelche Ideen?
Meine benutzerdefinierte Zellen-Klasse: https://github.com/ryancole/pound-client/blob/master/pound-client/views/MessageListCell.m
Den cellForRowAtIndexPath
Funktion: https://github.com/ryancole/pound-client/blob/master/pound-client/controllers/MessageListViewController.m#L62-L84
Edit 1:
Zeigen, was passiert, wenn ich numberOfLines
auf 0 für unbegrenzt, ich habe die angehängten screenshots an, die aufgerufen wird. Es umschließt nach ein paar Zeichen, anstatt der ersten Einnahme bis die angegebene Breite der UILabel-Rahmen. Dies wird vor genannt sizeToFit
.
InformationsquelleAutor Ryan | 2012-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie numberOfLines, um die Anzahl der Zeilen, die Sie wollen, oder 0 ermöglicht eine unbegrenzte Anzahl von Zeilen (Standardwert ist 1). Möglicherweise müssen Sie auch um die lineBreakMode zu NSLineBreakByWordWrapping (obwohl, dass könnte der Standard).
Nach Edit: Wenn Sie wollen den text zu beginnen, an der Spitze, dann denke ich, müssen Sie die variable Höhe-Zellen, und nicht festlegen, dass eine explizite Größe für die benutzerdefinierte Zelle. Ich habe es so in einem meiner Projekte:
Dem Etikett, das ich hier zu schaffen, ist nur für die Berechnung der Höhe der Zeile, es ist verworfen, nachdem diese Methode beendet ist. Die Breite der Zelle wird bestimmt durch die 300-argument habe ich in der constrainedToSize: parameter. Die +50 war nur ein fudge-Faktor habe ich Hinzugefügt, um meine Zellen nach rechts -- würden Sie wahrscheinlich wollen, um Durcheinander mit, die Zahl zu bekommen, was Sie wollen. In meiner benutzerdefinierten Zelle-Klasse, die ich verwendet, initWithStyle:reuseIdentifier, und nicht jeder Größe.
Rufen Sie nicht sizeToFit wenn es das ist, was Sie tun. Sie sollten nicht zu tun. Wenn Sie numberOfLines zu 0 sollte es wickeln Sie die Wörter in die nächste Zeile automatisch vorausgesetzt, es gibt genug vertikalen Raum in der Beschriftung zu ermöglichen, für die zusätzliche Zeilen.
versuchen Sie, die sizeToFit Linien in der cellForRowAtIndexPath: Methode, und sehen, ob das hilft. Sie bereiten eine explizite Größe, die in Ihrer init-Methode, also ich glaube nicht, dass Sie wollen, dass diese.
Oh, ok, das war es! Ich war nur die Kombination
sizeToFit
mit der ausdrücklichen breiten, die jetzt anschaut, es scheint wie eine schlechte Idee. Danke!Obwohl ich jetzt wusste, warum ich war mit
sizeToFit
- ich wollte richten Sie den text in das Etikett vertikal an der Spitze. Irgendeine Idee, wie dies zu tun, ohne sizeToFit?InformationsquelleAutor rdelmar