2012-12-29 106 views
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點創建?

回答

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知道,如果你有其他子視圖後來添加y您需要過濾數組以僅獲取UILabels。如果訂單是問題,您可以獲取所有標籤並檢查其y位置以獲取最後一個。

另一種方式是在創建標籤的循環結尾保存一個指向UILabel的指針,並在每次創建新標籤時更新該指針。

+0

也許我可以更好地說出我的問題:真正的問題是我沒有標識符到以前的標籤,因爲標籤是動態創建的。或者有什麼方法可以在索引的for循環中創建標籤,那麼我可以在每個標籤標識符上放置一個唯一編號? – Jay

+0

您可以獲取包含超級視圖的子視圖並以這種方式找到您的標籤。 – danielrsmith

+0

@Jay編輯答案 – shannoga