Development/아이폰
[아이폰:오브젝티브C] 레이블 세로정렬 Top(UILabel vertical Alignment)
江多林
2010. 2. 25. 15:58
나를 귀찮게 하는 아이폰의 api 부재
레이블에 대해서 문자의 가로정렬은 쉽게 되지만, 세로정렬은 sdk 의 속성을
눈 씻고 찾아봐도 찾을 수 없어 구걸신에게 또 구걸하여 아래와 같은 코드를 얻었다.
개념은 NSString의 sizeWithFont 메소드를 사용하여 실제로 그려질 크기를 손쉽게 구한 후에
이 값을 UILabel의 frame에 대입해주는 것이다.
아래 예제는 top 정렬 뿐 아니라 bottom 정렬도 가능한 예제이다.
참조: http://discussions.apple.com/thread.jspa?messageID=8322622
- (void)setUILabel:(UILabel *)myLabel withMaxFrame:(CGRect)maxFrame withText:(NSString *)theText usingVerticalAlign:(int)vertAlign {
CGSize stringSize = [theText sizeWithFont:myLabel.font constrainedToSize:maxFrame.size lineBreakMode:myLabel.lineBreakMode];
switch (vertAlign) {
case 0: // vertical align = top
myLabel.frame = CGRectMake(myLabel.frame.origin.x,
myLabel.frame.origin.y,
myLabel.frame.size.width,
stringSize.height
);
break;
case 1: // vertical align = middle
// don't do anything, lines will be placed in vertical middle by default
break;
case 2: // vertical align = bottom
myLabel.frame = CGRectMake(myLabel.frame.origin.x,
(myLabel.frame.origin.y + myLabel.frame.size.height) - stringSize.height,
myLabel.frame.size.width,
stringSize.height
);
break;
}
myLabel.text = theText;
}
레이블에 대해서 문자의 가로정렬은 쉽게 되지만, 세로정렬은 sdk 의 속성을
눈 씻고 찾아봐도 찾을 수 없어 구걸신에게 또 구걸하여 아래와 같은 코드를 얻었다.
개념은 NSString의 sizeWithFont 메소드를 사용하여 실제로 그려질 크기를 손쉽게 구한 후에
이 값을 UILabel의 frame에 대입해주는 것이다.
아래 예제는 top 정렬 뿐 아니라 bottom 정렬도 가능한 예제이다.
참조: http://discussions.apple.com/thread.jspa?messageID=8322622
- (void)setUILabel:(UILabel *)myLabel withMaxFrame:(CGRect)maxFrame withText:(NSString *)theText usingVerticalAlign:(int)vertAlign {
CGSize stringSize = [theText sizeWithFont:myLabel.font constrainedToSize:maxFrame.size lineBreakMode:myLabel.lineBreakMode];
switch (vertAlign) {
case 0: // vertical align = top
myLabel.frame = CGRectMake(myLabel.frame.origin.x,
myLabel.frame.origin.y,
myLabel.frame.size.width,
stringSize.height
);
break;
case 1: // vertical align = middle
// don't do anything, lines will be placed in vertical middle by default
break;
case 2: // vertical align = bottom
myLabel.frame = CGRectMake(myLabel.frame.origin.x,
(myLabel.frame.origin.y + myLabel.frame.size.height) - stringSize.height,
myLabel.frame.size.width,
stringSize.height
);
break;
}
myLabel.text = theText;
}