Отлично работает и для многострочных строк.
В основном это функция, которая позволяет вам видеть, насколько большой будет строка при визуализации с использованием шрифта и режима разрыва строки.
Я использую его в нескольких местах в моем приложении, когда у меня есть текст переменной длины, который я хочу отобразить в определенной области.
По умолчанию UILabel будет центрировать текст по вертикали. Чтобы текст был выровнен по верху, размер метки должен быть таким, чтобы она соответствовала только высоте, необходимой для строки, которая в нем находится.
Я использую этот метод для этого.
И пример того, как я бы это использовал, выглядит следующим образом:
//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;
Вы указываете, насколько большой области вы должны поместить текст, а затем этот метод сообщает вам, сколько места он займет (обтекание по мере необходимости). Также, если строка выйдет за границы предоставленного вами прямоугольника, вы можете указать, а затем решили, как отобразить текст.
Ссылка на него, который фактически не переносит текст, есть, потому что этот метод на самом деле ничего не делает с текстом. Он просто фактически выкладывает это и возвращает, насколько большая область должна была бы действительно выложить это.
Это ответственность лейбла (или какого-либо контейнера, который вы используете для текста), чтобы выполнить перенос / что еще нужно сделать.
Надеюсь, это поможет.
Крис.