2013-11-28 21 views
0

я подклассы в UILabel поэтому было бы изменить размеры себя, но по какой-то причине мое последнее слово усекается до ...высота установка метки программно

Большую часть времени это работает просто отлично, но по какой-то причине мое предложение с x символов усекаются, и я не понимаю, почему. Может ли кто-нибудь взглянуть на это?

- (void)setFrame:(CGRect)newFrame { 
    NSInteger maxNrOfLines = maxNumberOfLines == 0 ? 9999 : maxNumberOfLines; 
    NSString *text = self.text; 
    UIFont *font = self.font; 
    CGSize lineSize = CGSizeMake(newFrame.size.width, maxNrOfLines * font.lineHeight); 
    CGSize size = [text sizeWithFont:font constrainedToSize:lineSize lineBreakMode:self.lineBreakMode]; 

    NSInteger lineCount = MIN(maxNrOfLines, MAX(1, size.height/font.lineHeight)); 
    CGFloat height = font.lineHeight * lineCount + 10; 

    newFrame.size.height = height; 
    super.frame = newFrame; 
    super.numberOfLines = newFrame.size.height/font.lineHeight; 
} 

Мое предложение должно быть на 3 линии, но он рассчитывает только 2.

+0

Вы проверили, каково фактическое значение 'maxNumberOfLines' и, как результат, значение' maxNrOfLines'? Возможно, я что-то упускаю, но я не вижу ничего другого, что могло бы вызвать это. – triazotan

+0

maxNumberOfLines = 9999 maxNrOfLines = 0 В конечном счете lineCount будет 2 с моим отправлением –

ответ

1

Для того, чтобы вычислить высоту UILabel точно, вы можете использовать sizeWithFont constrainedToSize:lineBreakMode:
Пример:

float width = 296; 
CGSize maximumLabelSize = CGSizeMake(width, 9999); 
CGSize expectedLabelSize = [yourText sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; 
//set height of yourLabel to what we calculated 
CGRect frame = yourLabel.frame; 
frame.size.height = expectedLabelSize.height; 
yourLabel.frame = frame; 

В этом подход, мы ожидаем, что пользователь будет вводить ширина, font и lineBreakMo de UILabel и возвращает ожидаемый размер кадра.

Смежные вопросы