2010-12-16 3 views
0

Предположим, у меня есть два UILabels, расположенных вертикально друг под другом в UITableViewCell. Режим разрыва линии установлен на UILineBreakModeWordWrap для обоих.Как упорядочить динамически размер UILabels по вертикали?

Их горизонтальный размер фиксирован, но оба могут растягиваться вертикально в зависимости от того, сколько текста они отображают. Как позиционировать динамику ниже, чтобы они никогда не перекрывались?

ответ

2

Я использую эту функцию, чтобы получить высоту текста, а затем установить вторую высоту метки в результат.

- (CGFloat)HeightOfText:(NSString *)textToMesure widthOfLabel:(CGFloat)width 
{ 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 
    CGSize ts = [textToMesure sizeWithFont:textFont constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    return ts.height+25.0; //you can change the last number to fit the space you wish to have between the labels. 
} 

и использовать его так:

NSString *firstLabelText = @"the text"; 
CGFloat textSize = [self HeightOfText:firstLabelText widthOfLabel:firstLabel.frame.size.width]; 

затем использовать "TextSize", чтобы установить вторую высоту этикетки.

надеюсь, что это поможет.

2

Попробуйте - [UILabel sizeThatFits:]. Скажем, вы кладете ярлыки в столбце шириной 300 пикселей, вы можете передать размер (300,99999), и он скажет вам размер, который на самом деле должен соответствовать этому тексту. Вы можете использовать это для настройки рамки ваших ярлыков соответственно.

+0

Лучший ответ @ Шани годов, потому что 'sizeWithFont: constrainedToSize: lineBreakMode:' не будет включать в себя поля, что UILabel добавит, но попросив UILabel к самому размеру с помощью 'sizeToFit' будет :) – deanWombourne

+0

Хорошая точка зрения. Upvoted @ shani's –

+0

Эй, спасибо за ответы. Тем временем я столкнулся с тем, что методы 'sizeToFit' и' sizeWithFont' в основном дают одинаковые результаты. Кроме того, это также помогает установить количество строк в строке 'UILabel' равным 0, как было указано в других сообщениях. – kadam

0

Я сделал что-то подобное, сбросив рамку вида ниже (если вы уже сделали sizeWithFont или sizeThatFits и изменили размер меток). Подобно этому:

- (void)positionView:(UIView *)aView belowView:(UIView *)anotherView withPadding:(int)padding 
{ 
    CGRect aFrame = aView.frame; 
    if (anotherView) 
    { 
     aFrame = (anotherView.frame.origin.y + anotherView.frame.size.height); 
    } 
    aFrame.origin.y += padding; 
    aView.frame = aFrame; 
} 
Смежные вопросы