2010-12-16 6 views
0

UITableViewCell에 두 개의 UILabels이 서로 아래에 수직으로 위치한다고 가정 해 봅시다. 줄 바꿈 모드는 두 가지 모두에 대해 UILineBreakModeWordWrap으로 설정됩니다.동적으로 크기가 조정 된 UILabels를 수직으로 정렬하는 방법은 무엇입니까?

가로 크기는 고정되어 있지만 둘 다 표시되는 텍스트의 양에 따라 세로로 늘어날 수 있습니다. 중복되지 않도록 동적으로 아래에있는 것을 어떻게 배치합니까?

답변

2

이 함수를 사용하여 텍스트의 높이를 얻은 다음 두 번째 레이블 높이를 결과로 설정합니다.

- (CGFloat)HeightOfText:(NSString *)textToMesure widthOfLabel:(CGFloat)width 
{ 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 
    CGSize ts = [textToMesure sizeWithFont:textFont constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    return ts.height+25.0; //you can change the last number to fit the space you wish to have between the labels. 
} 

은 당신이 그런 식으로 그것을 사용 :

NSString *firstLabelText = @"the text"; 
CGFloat textSize = [self HeightOfText:firstLabelText widthOfLabel:firstLabel.frame.size.width]; 

는 다음 두 번째 레이블 높이를 설정하기 위해 "TEXTSIZE"를 사용합니다.

희망이 도움이 될 것입니다.

2

시도해보기 - [UILabel sizeThatFits :]. 300px 너비의 열에 레이블을 긋고 있다고 가정하면 (300,99999)의 크기를 전달할 수 있으며 텍스트를 실제로 넣을 때 필요한 크기를 알려줍니다.이 값을 사용하여 라벨의 틀을 적절하게

+0

샤니 년대 @ 더 나은 대답 sizeWithFont'이유는 constrainedToSize : lineBreakMode :의'UILabel의 추가하지만 sizeToFit'이 – deanWombourne

+0

을 :) 것'사용하여 크기 자체에 UILabel의 요청합니다 여백을 포함하지 않습니다 좋은 지적. Upvoted @ shani의 –

+0

안녕하세요, 답변 주셔서 감사합니다. 나는 그동안 경험 해왔고'sizeToFit'와'sizeWithFont' 메소드는 기본적으로 같은 결과를 제공한다는 것을 발견했습니다. 또한 'UILabel'의 줄 수를 0으로 설정하는 것도 도움이됩니다. 다른 줄에 설명되어 있습니다. – kadam

0

저는 아래 그림의 프레임을 재설정하여 비슷한 작업을 수행했습니다 (이미 sizeWithFont 또는 sizeThatFits를 완료하고 레이블의 크기를 변경했다고 가정). 이 유사 :

- (void)positionView:(UIView *)aView belowView:(UIView *)anotherView withPadding:(int)padding 
{ 
    CGRect aFrame = aView.frame; 
    if (anotherView) 
    { 
     aFrame = (anotherView.frame.origin.y + anotherView.frame.size.height); 
    } 
    aFrame.origin.y += padding; 
    aView.frame = aFrame; 
} 
관련 문제