iPhone UILabel sizeWithFont:

Я сказал бы, что это больше похоже на ленивое обходное решение для того, что Мерзавец не может в настоящее время обрабатывать наличие нескольких проектов, сохраненных в том же репозитории. Можно сделать это, но нет никакого пути к выпадающему просто того, который Вы хотите.

я говорю "ленивый", потому что не было бы слишком ужасно трудно добавить опцию, когда сами разработчики мерзавца обнаружили потребность в нем (для хранения документов). Так как они использовали этот странный взлом ответвления, их стимул устранить проблему для всех остальных уменьшил significanly.

5
задан Oded Ben Dov 7 August 2011 в 12:41
поделиться

4 ответа

Вместо 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.

12
ответ дан 18 December 2019 в 10:47
поделиться

Конечно, он не принимает это во внимание, поскольку ничто из вызываемого или передаваемого не имеет этой информации. Вы строго работаете со строками, размерами и шрифтами. Это метка, на которой указано количество строк.

Я не уверен, в чем именно заключается ваша проблема; вы получаете слишком высокий или слишком короткий размер, что ли? Вы можете узнать количество строк текста, разделив высоту результата на высоту шрифта, которая, как я полагаю, является значением восходящего плюс нижнего.

-1
ответ дан 18 December 2019 в 10:47
поделиться

Вместо того, чтобы пытаться сделать это за один вызов, сделайте что-нибудь вроде этого (простите за псевдокод, уже поздно):

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

}
0
ответ дан 18 December 2019 в 10:47
поделиться

Правильный ответ - конечно, вам нужно установить numberOfLines на 0, что заставит платформу вычислять результат с любым количеством строк, которое ей нужно. См. Также этот вопрос .

0
ответ дан 18 December 2019 в 10:47
поделиться