A colossal Dreamer: GR鐵塔-天生我材

[아이폰:오브젝티브C] 레이블 세로정렬 Top(UILabel vertical Alignment) 본문

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;
}