Es funktioniert auch für Multi-Line-Saiten.
Im Grunde ist es eine Funktion, mit der Sie sehen können, wie groß ein String sein wird, wenn er mit einem Font- und Zeilenumbruchmodus gerendert wird.
Ich benutze es an einigen Stellen in meiner Anwendung, wenn ich Text variabler Länge habe, den ich in einem bestimmten Bereich anzeigen möchte.
Standardmäßig zentriert UILabel den Text vertikal. Um den Text oben ausgerichtet zu haben, müssen Sie die Beschriftung auf die Höhe einstellen, die für die darin enthaltene Zeichenfolge erforderlich ist.
Ich verwende diese Methode, um dies zu tun.
Und Beispiel dafür, wie ich es benutzen würde, das zu tun ist wie folgt:
//Calculate the expected size based on the font and linebreak mode of your label
CGSize maximumLabelSize = CGSizeMake(296,9999);
CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font
constrainedToSize:maximumLabelSize
lineBreakMode:yourLabel.lineBreakMode];
//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
Sie legen fest, wie groß der Bereich müssen Sie den Text in setzen, und dann diese Methode erfahren Sie, wie viel Platz es wird aufnehmen (wie erforderlich). Auch wenn der String die Grenzen des von Ihnen bereitgestellten Rect überläuft, können Sie sagen, und dann entschieden, wie der Text angezeigt wird.
Der Verweis darauf, der den Text nicht wirklich umschließt, ist da, weil diese Methode tatsächlich nichts mit dem Text tut. Es legt es quasi virtuell auf und gibt zurück, wie groß ein Gebiet sein würde, um es wirklich auszulegen.
Es liegt in der Verantwortung des Etiketts (oder des jeweiligen Containers, den Sie für den Text verwenden), die Verpackung/was immer sonst noch zu tun ist, durchzuführen.
Hoffe, dass hilft.
chris.
newFrame.size.height = maximumLabelSize .height; SB: newFrame.size.height = expectedLabelSize.height; – JoBu1324
funktioniert auch, wenn Sie in einem Rect zeichnen! – tipycalFlow