0

在我的应用程序中,我有 4 个标签,我需要将它们添加到前一个标签的正下方。问题是这些标签是动态填充的,我不知道标签的大小。

例如,在下面的代码中,我有 2 个标签 - myLabel 和 titleLabel。我需要将 titleLabel 粘贴到 myLabel 的正下方,但问题是后者的高度不同。所以我不能给出titleLabel的y坐标。

CGRect labelFrame = CGRectMake(22, 50, 280, 150);
UILabel *myLabel = [[UILabel alloc] initWithFrame:labelFrame];
[myLabel setText:finalIngredients];
[myLabel setBackgroundColor: [UIColor lightGrayColor]];
[myLabel setFont:[UIFont fontWithName:@"Helvetica" size:15]];
[myLabel setNumberOfLines:0];
[myLabel sizeToFit];
[self.view addSubview:myLabel];


CGRect titleLabelFrame = CGRectMake(0, 25, 400, 15);
UILabel *titleLabel = [[UILabel alloc] initWithFrame:titleLabelFrame];
[titleLabel setText:title];
[self.view addSubview:titleLabel];

谢谢

4

3 回答 3

2

利用myLabel.bounds.size.heightmyLabel.frame.origin.y分别获取 的高度和起始 y 坐标myLabelsizeToFit据我所知,当您调用(例如)时,它们会动态变化。在您的情况下,您可以简单地更改线路

CGRect titleLabelFrame = CGRectMake(0, 25, 400, 15);

CGRect titleLabelFrame = CGRectMake(0, myLabel.frame.origin.y + myLabel.bounds.size.height, 400, 15);
于 2012-07-01T03:05:17.790 回答
1

用这个动态计算高度:

 CGSize size = [finalIngredients sizeWithFont:[UIFont systemFontOfSize:15]
      constrainedToSize:CGSizeMake(100, 200)
          lineBreakMode:UILineBreakModeWordWrap];

这里 finalIngredients 是你的字符串。你只需要提供你想要的标签的宽度来代替 100。

根据上一个或下一个标签动态计算标签的框架

于 2012-07-01T02:46:47.587 回答
0

如果文本是动态的,那么你有一个修改文本的函数是理所当然的。

在该函数内部,计算内部新修改文本的高度myLabel。然后将 y 位置设置titleLabelmyLabel'sx 位置 +myLabel新计算的高度 + 您在它们之间需要的任何缓冲空间。:)

于 2012-07-01T02:32:53.290 回答