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 방법 을 통 해 우 리 는 라벨 의 크기 를 문자 외부 에'딱'밀 착 시 켜 정상 을 치 우 는 효 과 를 실현 할 수 있 음 을 알 수 있다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
iOS 에서 UILabel 설정 은 위 에서 정렬,가운데 정렬,아래 정렬 및 텍스트 위 에 표 시 됩 니 다.우 리 는 레이 블 의 텍스트 를 맨 위 에 올 려 놓 는 경우 가 많 습 니 다.즉,레이 블 상자 의 맨 위 에 텍스트 를 올 려 놓 는 것 입 니 다.UILabel 은 내용 문 자 를 맨 위 에 올 려 놓 을 수...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.