2012-12-29 3 views
1

동적으로 레이블을 생성하고 작성된 마지막 레이블을 기준으로 레이블을 재정렬하는 코드를 작성했습니다. 다음 코드를 사용하여 내용의 크기에 맞게 레이블의 높이를 만들고 크기를 조정합니다. 항상 이전 라벨 아래 8 점 생성하도록동적으로 생성 된 다른 레이블에 상대적인 레이블 정렬

// 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); 

가 어떻게이 다음 라벨을 재조정 할 수 있도록 이전 레이블 식별자를 찾을 수 있습니까를 작성하는?

답변

2

시도 등 CGRectGetMinY를 사용하는 (이쪽을 봐 : CGGeometry Reference를 예를 들어, 이전 UILabel의의 가장자리를 얻을 :

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

편집

내가 마지막 UILabel의 마지막이라고 가정 할 수있다 보기에 추가 한 사진 :

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

나중에 다른 하위보기를 추가하면 배열을 필터링하여 UILabels 만 가져와야합니다. 순서가 문제라면 모든 레이블을 가져와 마지막 위치를 얻기 위해 y 위치를 확인할 수 있습니다.

다른 방법으로는 레이블을 만드는 루프 끝에 UILabel에 대한 포인터를 저장하고 새 레이블을 만들 때마다 해당 포인터를 업데이트하는 것도 있습니다.

+0

어쩌면 나는 내 질문을 더 잘 표현할 수 있었다. 실제 문제는 레이블이 동적으로 작성되었으므로 이전 레이블에 식별자가 없다는 점이다. 아니면 for 루프에서 인덱스를 사용하여 레이블을 만들 수있는 방법이 있습니까? 그렇다면 모든 단일 레이블 인덱서에 고유 번호를 지정할 수 있습니까? – Jay

+0

포함하는 superview의 하위보기를 가져 와서 그런 식으로 레이블을 찾을 수 있습니다. – danielrsmith

+0

@Jay 님이 답변을 편집했습니다 – shannoga

관련 문제