我正在编写一个动态创建标签的代码,并相对于最后创建的标签重新对齐标签。我使用以下代码来创建和调整标签的高度以适应内容。
// 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个点?
答案 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的指针,并在每次创建新标签时更新该指针。