如何垂直排列动态大小的UILabels?

时间:2010-12-16 16:11:53

标签: iphone uitableview uilabel

假设我在UILabels中有两个UITableViewCell垂直位于彼此之下。对于两者,换行模式都设置为UILineBreakModeWordWrap

它们的水平尺寸是固定的,但两者都可以根据显示的文字数量垂直拉伸。如何动态定位下面的那个以便它们永远不会重叠?

3 个答案:

答案 0 :(得分:2)

尝试 - [UILabel sizeThatFits:]。假设您将标签放在300px宽的列​​中,您可以传入大小(300,99999),它会告诉您实际需要的大小以适合该文本。您可以使用它来调整适当的标签框架。

答案 1 :(得分: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 :(得分: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;
}