iOS 에서 UILabel 설정 은 위 에서 정렬,가운데 정렬,아래 정렬 및 텍스트 위 에 표 시 됩 니 다.

iOS 에서 UILabel 설정 은 위 정렬,가운데 정렬,아래 정렬
iOS 에서 기본 UILabel 의 문 자 는 세로 방향 에서 가운데 만 정렬 할 수 있 습 니 다.블 로 거들 은 외국 사 이 트 를 참고 하여 UILabel 에서 새로운 종 류 를 계승 하여 위 에서 정렬 하고 가운데 에서 정렬 하 며 아래 에서 정렬 합 니 다.
구체 적 으로 다음 과 같다.

// 
// myUILabel.h 
// 
// 
// Created by yexiaozi_007 on 3/4/13. 
// Copyright (c) 2013 yexiaozi_007. All rights reserved. 
// 
#import <UIKit/UIKit.h> 
typedef enum 
{ 
 VerticalAlignmentTop = 0, // default 
 VerticalAlignmentMiddle, 
 VerticalAlignmentBottom, 
} VerticalAlignment; 
@interface myUILabel : UILabel 
{ 
@private 
VerticalAlignment _verticalAlignment; 
} 
@property (nonatomic) VerticalAlignment verticalAlignment; 
@end 

// 
// myUILabel.m 
// 
// 
// Created by yexiaozi_007 on 3/4/13. 
// Copyright (c) 2013 yexiaozi_007. All rights reserved. 
// 
#import "myUILabel.h" 
@implementation myUILabel 
@synthesize verticalAlignment = verticalAlignment_; 
 
- (id)initWithFrame:(CGRect)frame { 
 if (self = [super initWithFrame:frame]) { 
 self.verticalAlignment = VerticalAlignmentMiddle; 
 } 
 return self; 
} 
- (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment { 
 verticalAlignment_ = verticalAlignment; 
 [self setNeedsDisplay]; 
} 
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines { 
 CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines]; 
 switch (self.verticalAlignment) { 
 case VerticalAlignmentTop: 
  textRect.origin.y = bounds.origin.y; 
  break; 
 case VerticalAlignmentBottom: 
  textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height; 
  break; 
 case VerticalAlignmentMiddle: 
  // Fall through. 
 default: 
  textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0; 
 } 
 return textRect; 
} 
-(void)drawTextInRect:(CGRect)requestedRect { 
 CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines]; 
 [super drawTextInRect:actualRect]; 
} 
@end 
사용 시:

lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)]; 
UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//         label     
lbl_mylabel.backgroundColor = color; 
lbl_mylabel.textAlignment = UITextAlignmentLeft; 
lbl_mylabel.textColor = UIColor.whiteColor; 
lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap; 
lbl_mylabel.numberOfLines = 0; 
[lbl_mylabel setVerticalAlignment:VerticalAlignmentTop]; 
[self addSubview:lbl_mylabel]; 
UILabel 텍스트 위 에 표시
우 리 는 레이 블 의 텍스트 를 맨 위 에 올 려 놓 는 경우 가 많 습 니 다.즉,레이 블 상자 의 맨 위 에 텍스트 를 올 려 놓 는 것 입 니 다.UILabel 은 내용 문 자 를 맨 위 에 올 려 놓 을 수 없습니다.따라서 레이 블 에 추가 설정 을 하지 않 으 면 다음 과 같은 상황 이 발생 합 니 다.

꼭대기 에 놓다
해결 방법:우 리 는 sizeToFit 방법 을 통 해 그것 을 해결 할 수 있다.

- (void)viewDidLoad {
 [super viewDidLoad];
 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake((self.view.bounds.size.width - 200)/2, 100, 200, 150)];
 label.backgroundColor = [UIColor yellowColor];
 NSString *labelText = @"        ,     ?";
 [label setText:labelText];
 [label setNumberOfLines:0];  
 //     
 [label sizeToFit];
 [self.view addSubview:label];
}
효과 그림:

정점 을 찍 은 후
그러나 일부 파트너 들 은 콘 텐 츠 가 위 에 있 는 Label 의 frame 에 대해 걱정 을 할 수 있 습 니 다.필자 도 있 기 때문에 Label 뒤에 초기 Label 과 같은 frame 을 가 진 빨간색 배경 을 설 치 했 습 니 다.그러면 size ToFit 방법 을 설정 한 후에 Label 의 frame 에 변화 가 있 더 라 도 빨간색 배경의 frame 과 상대 적 으로 비교 해 볼 수 있 습 니 다.

셋 톱 전후 프레임 대비
우 리 는 문자 내용 이 위 에 올 라 간 후에 원래 레이 블 의 origin 은 거의 변화 가 없 었 고 bounds 는 문자 에 적응 하여 크기 가 바 뀌 었 다 는 것 을 알 수 있다.
따라서 sizeToFit 방법 을 통 해 우 리 는 라벨 의 크기 를 문자 외부 에'딱'밀 착 시 켜 정상 을 치 우 는 효 과 를 실현 할 수 있 음 을 알 수 있다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기