Как расположить UILabels динамического размера по вертикали? - PullRequest
0 голосов
/ 16 декабря 2010

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

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

Ответы [ 3 ]

2 голосов
/ 16 декабря 2010

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

- (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 голосов
/ 16 декабря 2010

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

0 голосов
/ 16 декабря 2010

Я сделал что-то похожее, сбросив рамку представленного ниже представления (при условии, что вы уже сделали 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...