假设我在UILabels
中有两个UITableViewCell
垂直位于彼此之下。对于两者,换行模式都设置为UILineBreakModeWordWrap
。
它们的水平尺寸是固定的,但两者都可以根据显示的文字数量垂直拉伸。如何动态定位下面的那个以便它们永远不会重叠?
答案 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;
}