将标签相对于另一个动态创建的标签对齐

时间:2012-12-29 13:54:23

标签: iphone xcode cocoa-touch ios6 alignment

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

// 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个点?

1 个答案:

答案 0 :(得分:2)

尝试使用CGRectGetMinY等(请查看此处:CGGeometry Reference以获取先前UILabel的边缘,例如:

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

修改

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

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

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

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