Categories
iOS/Swift

[iPhone] UILabel 2줄 이상 표시하기

UILabel을 이용하여 문자를 표시하다 보면 이상한 점이 있습니다.

바로 \n(New line)을 사용하여도 줄바꿈이 되지 않는다는 점인데요, Frame의 세로 크기를 아무리 늘려도 다음과 같이 나올 뿐입니다.

[code]- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 40.0f, 280.0f, 150.0f)];
    [label setText:@”Battle Cruiser Operational\nWho wanna piece a meat boy?”];
    [window addSubview:label];
    [label release];
   
    [window makeKeyAndVisible];
}[/code]


Who 앞에 분명히 \n이 들어가 있지만 줄바꿈이 일어나지 않습니다. 그리고 문자열이 …으로 줄어들어 버리는군요.

이때에는 NumberOfLine과 LineBreakMode를 설정하여 바꿔줍니다. NumberOfLine의 경우 최대 몇줄로 표시할 수 있는지에 대한 설정입니다.

0으로 하면 제한이 없이 Frame의 한계까지 줄이 늘어나게 됩니다.

LineBreakMode를 WordWrap으로 해주면 인위적인 줄바꿈 없이도 길이가 늘어나 Frame의 가로 영역보다 길어지게 되면 자동으로 줄바꿈이 일어나게 됩니다.

[code]- (void)applicationDidFinishLaunching:(UIApplication *)application {   
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20.0f, 40.0f, 280.0f, 150.0f)];
    [label setText:@”Battle Cruiser Operational\nWho wanna piece a meat boy?”];
    [label setNumberOfLines:0];
    [label setLineBreakMode:UILineBreakModeWordWrap];
    [window addSubview:label];
    [label release];
   
    [window makeKeyAndVisible];
}[/code]


줄 바꿈이 잘 일어나는 것을 알 수 있습니다.
1183830280.zip

Categories
iOS/Swift

[iPhone] UILabel 문자열 크기에 맞추어 frame 변경하기

iPhone 개발의 모든 컨트롤은 frame이라는 개념을 사용하여 뷰에 붙이게 됩니다.

이는 컨트롤이 붙을 위치와 차지할 크기를 가지고 있는 CGRect라는 이름의 구조체를 사용합니다.

UILabel을 사용할 경우에 보면 글자의 길이를 예측하기 힘든 경우가 많습니다. 하지만 뷰에 붙이기 전에 크기를 결정 지어야 하죠.

이 문제는 문자열의 크기에 맞추어 자동으로 frame이 맞추어 지면 해결되는 문제입니다. 다음과 같은 방법을 사용하시면 됩니다.

[code]#import <UIKit/UIStringDrawing.h>
 
NSString *labelText = @”Hello, Nice to meet you”;
CGSize labelSize = [labelText sizeWithFont:[UIFont systemFontOfSize:14.0f]];
UILabel label = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10.0f, labelSize.width, labelSize.height)];
label.text = labelText;
label.font = [UIFont systemFontOfSize:14.0f];
[self.view addSubView:label];
[label release];
 
NSLog(@”label size is %f, %f”,labelSize.width, labelSize.height);[/code]

찍히는 로그를 보시면 아시겠지만 labelText의 폰트와 글자 길이에 따라 labelSize의 값이 바뀌게 됩니다.

멀티라인을 이용할 경우는 [이곳]을 참고하세요.

Exit mobile version