Я сказал бы, что это больше похоже на ленивое обходное решение для того, что Мерзавец не может в настоящее время обрабатывать наличие нескольких проектов, сохраненных в том же репозитории. Можно сделать это, но нет никакого пути к выпадающему просто того, который Вы хотите.
я говорю "ленивый", потому что не было бы слишком ужасно трудно добавить опцию, когда сами разработчики мерзавца обнаружили потребность в нем (для хранения документов). Так как они использовали этот странный взлом ответвления, их стимул устранить проблему для всех остальных уменьшил significanly.
Вместо CGFLOAT_MAX для максимальной высоты вычисления текста попробуйте получить размер одной строки следующим образом:
[_price.text sizeWithFont:_price.font].height
, а затем умножьте это на максимальное количество строк, которое вы хотите, а затем вставьте это в высоту размера, который вы ограничиваете. Вероятно, это будет выглядеть так:
_price = [[UILabel alloc] init];
_price.text = myPriceValue;
_price.lineBreakMode = UILineBreakModeWordWrap;
_price.numberOfLines = 3;
_price.backgroundColor = [UIColor clearColor];
_price.textColor = TTSTYLEVAR(colorPrice);
CGFloat lineHeight = [_price.text sizeWithFont:_price.font].height;
CGSize priceSize = [_price.text sizeWithFont:_price.font
constrainedToSize:CGSizeMake(maxWidth, lineHeight * _price.numberOfLines)
lineBreakMode:UILineBreakModeWordWrap];
Не используйте это, если вы когда-либо устанавливали количество строк равным 0, так как ваша максимальная высота в этом случае будет равна 0; тогда вам следует использовать CGFLOAT_MAX.
Конечно, он не принимает это во внимание, поскольку ничто из вызываемого или передаваемого не имеет этой информации. Вы строго работаете со строками, размерами и шрифтами. Это метка, на которой указано количество строк.
Я не уверен, в чем именно заключается ваша проблема; вы получаете слишком высокий или слишком короткий размер, что ли? Вы можете узнать количество строк текста, разделив высоту результата на высоту шрифта, которая, как я полагаю, является значением восходящего плюс нижнего.
Вместо того, чтобы пытаться сделать это за один вызов, сделайте что-нибудь вроде этого (простите за псевдокод, уже поздно):
NSString *s = _price.text;
UIFont *font = _price.font;
CGFloat fontSize = font.pointSize;
while (TRUE)
{
CGSize priceSize = [s sizeWithFont: font constrainedToSize:
CGSizeMake(maxWidth, fontSize) lineBreakMode: UILineBreakModeWordWrap];
if ( /* priceSize is satisfactory */ )
{
break; // Make sure this exits, eventually!!!
}
fontSize -= 1.0; // or a smaller decrement if you like
font = // new, smaller font
}
Правильный ответ - конечно, вам нужно установить numberOfLines на 0, что заставит платформу вычислять результат с любым количеством строк, которое ей нужно. См. Также этот вопрос .