IOS的UILabel我个人觉得很弱智,居然只有横向设置而没有竖向设置文本位置,这让我很纠结。
先看效果
1.新建项目
2.编辑 ViewController.m文件
- (void)viewDidLoad
{
[superviewDidLoad];
#if 0
//创建
- (void)viewDidLoad
{
[superviewDidLoad];
#if 0
//创建UIlabel对象
UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds];
//设置显示文本
label.text = @"This is a UILabel Demo,";
//设置文本字体
label.font = [UIFont fontWithName:@"Arial" size:35];
//设置文本颜色
label.textColor = [UIColor yellowColor];
//设置文本水平显示位置
label.textAlignment = UITextAlignmentCenter;
//设置背景颜色
label.backgroundColor = [UIColor blueColor];
//设置单词折行方式
label.lineBreakMode = UILineBreakModeWordWrap;
//设置label是否可以显示多行,0则显示多行
label.numberOfLines = 0;
//根据内容大小,动态设置UILabel的高度
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:self.view.bounds.size lineBreakMode:label.lineBreakMode];
CGRect rect = label.frame;
rect.size.height = size.height;
label.frame = rect;
#endif
#if 1
使用自定义控件UILabelEx,此控件可以设置文本的垂直方向位置
UILabelEx* label = [[UILabelExalloc] initWithFrame:self.view.bounds];
label.text = @"This is a UILabel Demo,";
label.font = [UIFontfontWithName:@"Arial"size:35];
label.textColor = [UIColoryellowColor];
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColorblueColor];
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
label.verticalAlignment = VerticalAlignmentTop;//设置文本垂直方向顶部对齐。
#endif
//将label对象添加到view中,这样才可以显示
[self.view addSubview:label];
[label release];
}
3.自定义UILabelEx 控件
1)UILabelEx.h
#import <UIKit/UIKit.h>
//定义一个枚举类型,顶部,居中,底部对齐,三种类型
typedef enum {
VerticalAlignmentTop,
VerticalAlignmentMiddle,
VerticalAlignmentBottom,
} VerticalAlignment;
@interface UILabelEx : UILabel
{
VerticalAlignment _verticalAlignment;
}
@property (nonatomic, assign) VerticalAlignment verticalAlignment;
@end
2)UILabelEx.m
@implementation UILabelEx
@synthesize verticalAlignment = _verticalAlignment;
-(id) initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
self.verticalAlignment = VerticalAlignmentMiddle;
}
return self;
}
//设置文本显示类型
-(void) setVerticalAlignment:(VerticalAlignment)verticalAlignment
{
_verticalAlignment = verticalAlignment;
[selfsetNeedsDisplay];
}
//重写父类(CGRect) textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
-(CGRect) textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
CGRect textRect = [supertextRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
switch (self.verticalAlignment) {
caseVerticalAlignmentTop:
textRect.origin.y = bounds.origin.y;
break;
caseVerticalAlignmentBottom:
textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;
break;
caseVerticalAlignmentMiddle:
default:
textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;
}
return textRect;
}
//重写父类 -(void) drawTextInRect:(CGRect)rect
-(void) drawTextInRect:(CGRect)rect
{
CGRect realRect = [selftextRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:realRect];
}
@end