를 사용할 수 있음.
예제)
CGSize maximumLabelSize = CGSizeMake(_lyricsLabel.frame.size.width, CGFLOAT_MAX);
CGRect expectSize = [_lyricsLabel.text boundingRectWithSize:maximumLabelSize
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:_lyricsLabel.font}
context:nil];
_lyricsLabel.frame = CGRectMake(_lyricsLabel.frame.origin.x,
_lyricsLabel.frame.origin.y,
_lyricsLabel.frame.size.width,
expectSize.size.height);
NSString의 sizeWithFont:constrainedToSize:lineBreakMode: 메써드를 통해서 text가 그려질 layout metrics를 받아올수 있다.
아래는 그 사용 예제이다:
- (void)alignSingleLineLabels
{
[_label1 setText:@"첫번째 레이블."];
[_label2 setText:@"두번째 레이블 입니다.!"];
CGSize _label1_Size = [_label1.text sizeWithFont:_label1.font
constrainedToSize:CGSizeMake(320, 640)
lineBreakMode:UILineBreakModeWordWrap];
CGSize _label2_Size = [_label2.text sizeWithFont:_label2.font
constrainedToSize:CGSizeMake(320, 640)
lineBreakMode:UILineBreakModeWordWrap];
[_label1 setFrame:CGRectMake(_label1.frame.origin.x, _label1.frame.origin.y, _label1_Size.width, _label1_Size.height)];
float _label2_posX = _label1.frame.origin.x + _label1_Size.width;
[_label2 setFrame:CGRectMake(_label2_posX, _label2.frame.origin.y, _label2_Size.width, _label2_Size.height)];
}
- (void)alignMultipleLineLabels
{
[_label3 setText:@"첫번째 레이블.\n다은줄입니다."];
[_label4 setText:@"두번째 레이블.\n다음줄 입니다.\n다은줄 입니다."];
[_label5 setText:@"세번째 레이블.세번째 레이블.\n다음줄 입니다."];
CGSize _label3_Size = [_label3.text sizeWithFont:_label3.font
constrainedToSize:CGSizeMake(320, 640)
lineBreakMode:UILineBreakModeWordWrap];
CGSize _label4_Size = [_label4.text sizeWithFont:_label4.font
constrainedToSize:CGSizeMake(320, 640)
lineBreakMode:UILineBreakModeWordWrap];
CGSize _label5_Size = [_label5.text sizeWithFont:_label5.font
constrainedToSize:CGSizeMake(320, 640)
lineBreakMode:UILineBreakModeWordWrap];
[_label3 setFrame:CGRectMake(_label3.frame.origin.x, _label3.frame.origin.y, _label3_Size.width, _label3_Size.height)];
float _label4_posX = _label3.frame.origin.x + _label3_Size.width;
[_label4 setFrame:CGRectMake(_label4_posX, _label4.frame.origin.y, _label4_Size.width, _label4_Size.height)];
float label5_posY = _label3_Size.height > _label4_Size.height?(_label3.frame.origin.y+_label3_Size.height):(_label4.frame.origin.y+_label4_Size.height);
[_label5 setFrame:CGRectMake(_label5.frame.origin.x, label5_posY, _label5_Size.width, _label5_Size.height)];
}
레이블의 line 갯수를 가져와서 text가 그려질 line의 갯수와 비교하여 뉴라인문자(\n)을 리에블의 text에 append해줌으로써 text를 label의 맨 상단에 그려질 수 있도록 할 수있다.
- (void)alignTopLeft {
CGSize labelSize = [_label6.text sizeWithFont:_label6.font
constrainedToSize:CGSizeMake(_label6.frame.size.width, _label6.frame.size.height)
lineBreakMode:_label6.lineBreakMode];
int lineCount = labelSize.height/_label6.font.lineHeight;
int maxLineCount = _label6.numberOfLines;
for (int i=lineCount; i < maxLineCount; i++) {
_label6.text = [_label6.text stringByAppendingString:@"\n "];
}
}
아래는단말에서 실행된 화면이다.

댓글 없음:
댓글 쓰기