Как получить точную высоту метки, если она содержит NSAttributed String с частями строки в BOLD - PullRequest
3 голосов
/ 04 сентября 2011

В настоящее время я использую следующий метод для получения требуемой высоты надписи

+ (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint
{
    CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

    return size.height;
}

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

Например

enter image description here

Есть ли способы получить точную высоту этикетки, содержащей эту смесь?

Ответы [ 2 ]

1 голос
/ 29 августа 2013

Вот как

UILabel *labelWithAtributedText = ...
CGSize size = [labelWithAtributedText sizeThatFits:CGSizeMake(maxWidth, CGFLOAT_MAX)];
0 голосов
/ 20 мая 2012

Я тоже боролся с этим. Вот пара идей:

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

  2. Рассчитать среднее между systemFontOfSize и boldSystemFontOfSize

+ (CGFloat) getHeightOfLabel:(NSString *)text ofFontSize:(CGFloat)fontSize withConstraint:(CGSize)constraint  
{  
    CGSize size1 = [text sizeWithFont:[UIFont systemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];  
    CGSize size2 = [text sizeWithFont:[UIFont boldSystemFontOfSize:fontSize] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];  

    return (size1.height+size2.height)/2;  
}  

Если вам не нужна фактическая высота, используйте [label sizeToFit], но я предполагаю, что вам нужна эта высота:)

...