自定义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

原文地址:https://www.cnblogs.com/lxllanou/p/4010591.html