首页 > 代码库 > 自定义UILabel的对齐方式

自定义UILabel的对齐方式

在iOS中默认的UILabel中的文字在竖直方向上只能居中对齐,自定义UILabel,实现了居上对齐,居中对齐,居下对齐。具体如下:

 1     //   2     //  myUILabel.h   3     //     4     //   5     //  Created by yexiaozi_007 on 3/4/13.   6     //  Copyright (c) 2013 yexiaozi_007. All rights reserved.   7     //   8        9     #import <UIKit/UIKit.h>  10     typedef enum  11     {  12         VerticalAlignmentTop = 0, // default  13         VerticalAlignmentMiddle,  14         VerticalAlignmentBottom,  15     } VerticalAlignment;  16     @interface myUILabel : UILabel  17     {  18     @private  19     VerticalAlignment _verticalAlignment;  20     }  21       22     @property (nonatomic) VerticalAlignment verticalAlignment;  23       24     @end  
 1     //   2     //  myUILabel.m   3     //     4     //   5     //  Created by yexiaozi_007 on 3/4/13.   6     //  Copyright (c) 2013 yexiaozi_007. All rights reserved.   7     //   8        9     #import "myUILabel.h"  10       11     @implementation myUILabel  12     @synthesize verticalAlignment = verticalAlignment_;  13       14     - (id)initWithFrame:(CGRect)frame {  15         if (self = [super initWithFrame:frame]) {  16             self.verticalAlignment = VerticalAlignmentMiddle;  17         }  18         return self;  19     }  20       21     - (void)setVerticalAlignment:(VerticalAlignment)verticalAlignment {  22         verticalAlignment_ = verticalAlignment;  23         [self setNeedsDisplay];  24     }  25       26     - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {  27         CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];  28         switch (self.verticalAlignment) {  29             case VerticalAlignmentTop:  30                 textRect.origin.y = bounds.origin.y;  31                 break;  32             case VerticalAlignmentBottom:  33                 textRect.origin.y = bounds.origin.y + bounds.size.height - textRect.size.height;  34                 break;  35             case VerticalAlignmentMiddle:  36                 // Fall through.  37             default:  38                 textRect.origin.y = bounds.origin.y + (bounds.size.height - textRect.size.height) / 2.0;  39         }  40         return textRect;  41     }  42       43     -(void)drawTextInRect:(CGRect)requestedRect {  44         CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];  45         [super drawTextInRect:actualRect];  46     }  47       48       49     @end  

 

在使用时:

1     lbl_mylabel = [[myUILabel alloc] initWithFrame:CGRectMake(20, 50, 150, 600)];2     UIColor *color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"halfTransparent.png"]];//使用半透明图片作为label的背景色3     lbl_mylabel.backgroundColor = color;4     lbl_mylabel.textAlignment = UITextAlignmentLeft;5     lbl_mylabel.textColor = UIColor.whiteColor;6     lbl_mylabel.lineBreakMode = UILineBreakModeWordWrap;7     lbl_mylabel.numberOfLines = 0;8     [lbl_mylabel setVerticalAlignment:VerticalAlignmentTop];9     [self addSubview:lbl_mylabel];

 

转载:http://blog.csdn.net/yexiaozi_007/article/details/8636522

自定义UILabel的对齐方式