Проблема: Определите размер (количество строк), необходимый для UILabel
, при условии, что ширина 300 пикселей. Строка длиннее, поэтому я установил lineBreakMode
на UILineBreakModeWordWrap
и вызвал sizeThatFits
, чтобы попытаться определить размер. Но он дает ширину 457 пикселей в одной строке, а не ожидаемые 300 пикселей в двух строках.
См.:
CGSize available = CGSizeMake(300, INFINITY);
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
label.text = title;
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont fontWithName:kBoldFont size:kTitleFontSize];
label.numberOfLines = 3;
CGSize sizedtoFit = [label sizeThatFits:available];
Но я обнаружил, что переменная sizetoFit имеет ширину 457 пикселей и высоту 22 пикселей. , а пользовательский интерфейс отображает одну строку с обрезанным текстом. Я ожидаю ширину 300 пикселей и высоту 44 пикселей для двух строк.
В документе UILabel для numberoflines говорится:
Когда размер приемника изменяется с помощью метода sizeToFit
, изменение размера принимает учитывать значение, хранящееся в этом свойстве. Например, если для этого свойства установлено значение 3, метод sizeToFit
изменяет размер приемника так, чтобы он был достаточно большим для отображения трех строк текста.
Я пробовал различные комбинации:
CGRectZero
в функцию init, передавая 300x400 или 300 x бесконечность. init
. [sizeToFit] ]
и надеется, что он вычислит высоту, принимая текущую ширину, но это не так. layoutIfNeeded
. Ни один из них не работает. Что я делаю не так, или это плохая ошибка, когда документация и реализация фреймворка не совпадают? Спасибо.