1

我正在编写一个动态创建标签并相对于创建的最后一个标签重新对齐标签的代码。我正在使用以下代码来创建标签的高度并调整其大小以适应内容。

// Create label
UILabel *label =  [[UILabel alloc] initWithFrame:CGRectZero];
label.text = SomeVariatingTextContent;
[self.scrollView addSubview:label];
// Resize Label
UIFont* font = label.font;
CGSize constraintSize = CGSizeMake(label.frame.size.width, MAXFLOAT);
CGSize labelSize = [label.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeTailTruncation];
label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, 280, labelSize.height);

如何找到前一个标签的标识符,以便我可以重新对齐正在创建的下一个标签,使其始终比创建的前一个标签低 8 点?

4

1 回答 1

2

尝试使用 CGRectGetMinY 等(看这里:CGGeometry Reference以获取先前 UILabel 的边缘,例如:

CGFloat *yPos =  CGRectGetMinY(previousLabelRect);
nextLabel.frame = CGRectMake(x,yPos+8,width,height);

编辑

我可以假设最后一个 UILabel 是您添加到视图中的最后一个,因此您可以:

 UILabel lastLabel = [[self.view subviews]lastObject];

Br 请注意,如果您稍后添加了其他子视图,则需要过滤数组以仅获取 UILabels。如果顺序是问题,您可以获取所有标签并检查它们的 y 位置以获取最后一个。

另一种方法是在创建标签的循环末尾保存指向 UILabel 的指针,并在每次创建新标签时更新该指针。

于 2012-12-29T14:08:00.447 回答