iOS开发UILabel的公共属性及拓展属性

IOS开发的过程中,UILabel是很常用的一个控件,同时也是大量使用的一个控件。创建一个UILabel一般需要五六句代码,如果我们需要创建几十个UILabel,就意味着我们要写五六十句代码,其实很多代码是重复的,我们可以把类似的代码写到一个公共的方法中,以提高工作效率和降低代码重复。官方提供UILabel的一些属性有很大的局限性,有些在项目中开发中需要用到的一些拓展性的属性,根据个人经验,也顺便一起总结在这里。

 

一、创建UILabel公共的方法

1、头文件中声明方法如下:

 

?
1
2
3
4
5
+ (UILabel *)commonLabelWithFrame:(CGRect)frame
                              text:(NSString*)text
                             color:(UIColor*)color
                              font:(UIFont*)font
                     textAlignment:(NSTextAlignment)textAlignment;


2、源文件中实现该方法:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+ (UILabel *)commonLabelWithFrame:(CGRect)frame
                              text:(NSString*)text
                             color:(UIColor*)color
                              font:(UIFont*)font
                     textAlignment:(NSTextAlignment)textAlignment
{
     UILabel *label = [[UILabel alloc] initWithFrame:frame];
     label.text = text;
     label.textColor = color;
     label.font = font;
     label.textAlignment = textAlignment;
     
     label.backgroundColor = [UIColor clearColor];
     
     return label;
}



 

二、动态设置UILabel高度

1、头文件申明方法如下:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
  *  创建一个动态高度的UILabel
  *
  *  @param pointX        Label的横坐标
  *  @param pointY        Label的纵坐标
  *  @param width         Label的宽度
  *  @param strContent    内容
  *  @param color         字体颜色
  *  @param font          字体大小
  *  @param textAlignmeng 对齐方式
  *
  *  @return 返回一个UILabel
  */
+ (UILabel *)dynamicHeightLabelWithPointX:(CGFloat)pointX
                                    pointY:(CGFloat)pointY
                                     width:(CGFloat)width
                                strContent:(NSString *)strContent
                                     color:(UIColor *)color
                                      font:(UIFont *)font
                             textAlignmeng:(NSTextAlignment)textAlignmeng;


2、源文件中实现该方法:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//动态设置Label的高度
+ (UILabel *)dynamicHeightLabelWithPointX:(CGFloat)pointX
                                    pointY:(CGFloat)pointY
                                     width:(CGFloat)width
                                strContent:(NSString *)strContent
                                     color:(UIColor *)color
                                      font:(UIFont *)font
                             textAlignmeng:(NSTextAlignment)textAlignmeng
{
     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
     paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
     
     NSDictionary *attributes = @{NSFontAttributeName:font,
                        NSParagraphStyleAttributeName:paragraphStyle.copy};
     
     CGSize labelSize = [strContent boundingRectWithSize:CGSizeMake(width,MAXFLOAT)
                                                 options:NSStringDrawingUsesLineFragmentOrigin
                                              attributes:attributes
                                                 context:nil].size;
     
     UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(pointX, pointY, width, labelSize.height)];
     [myLabel setNumberOfLines: 0 ];
     myLabel.text = strContent;
     myLabel.font = font;
     myLabel.textColor = color;
     return myLabel;
 
}


3、测试结果:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
- ( void )viewDidLoad {
     [ super viewDidLoad];
     
     NSString *str = @6 月初,华润华发联合体以 87.95 亿元拿下上海闸北地块,地块楼面价 38061 元/平方米,刷新了其自身于 3 月创下的上海总价“地王”纪录。同日,招商平安联合体则以高达 2.3 万元/平方米的楼面价,竞得宝山大场镇地块,创出近 90 %的高溢价率。不仅是一线市场,杭州、苏州等二线市场也在 6 月初集中推地。杭州西溪湿地旁低密度住宅地块楼面价 9975 元/平方米,溢价率 33 %,成为 2014 年春节以来杭州溢价率最高的住宅用地。;
     
    UILabel *label = [LTLabel dynamicHeightLabelWithPointX: 5 pointY: 20 width:self.view.frame.size.width- 10 strContent:str color:[UIColor blackColor] font:[UIFont systemFontOfSize: 20.0 ] textAlignmeng:NSTextAlignmentLeft];
     label.backgroundColor = [UIColor groupTableViewBackgroundColor];
     
     [self.view addSubview:label];
     
}

 

 

(1)字体大小为15号,与边距间隔为5,测试结果如下:

\

(2)字体大小为20号,于边距间隔为5,测试结果如下:

\

 

(3)字体大小为20号,于边距间隔为50,测试结果如下:

\

 

(4)字体大小为20号,于边距间隔为5,增加文本内容,测试结果如下:

\

 

 

三、设置UILabel的对齐方式

对于官方已经提供UILabel的一些对齐方式,在这里就不做说明了,这里主要补充官方没有提供的对齐方式。主要提供了三种常用的对齐方式:垂直顶端对齐、顶端居中对齐、顶端靠右对齐。

 

1、头文件申明方法如下:

 

?
1
2
3
4
5
6
7
8
9
@interface DpLabel : UILabel
 
typedef enum {
     VerticalAlignmentTop = 0 , //default 垂直顶端对齐
     VerticalAlignmentMidele,  //顶端居中对齐
     VerticalAlignmentBottom,  //顶端靠右对齐
}VerticalAlignment;
 
@property (nonatomic, assign) VerticalAlignment verticalAlignment;


2、源文件实现该方法:

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# import DpLabel.h
 
@implementation DpLabel
@synthesize verticalAlignment;
 
 
- (id)initWithFrame:(CGRect)frame
{
     self = [ super initWithFrame:frame];
     if (self) {
         // Initialization code
         verticalAlignment = VerticalAlignmentTop;
     }
     return self;
}
 
- (VerticalAlignment)verticalAlignment
{
     return verticalAlignment;
}
 
- ( void )setVerticalAlignment:(VerticalAlignment)align
{
     verticalAlignment = align;
     [self setNeedsDisplay];
}
 
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines
{
     CGRect rc = [ super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
     switch (verticalAlignment) {
         case VerticalAlignmentTop:
             rc.origin.y = bounds.origin.y;
             break ;
         case VerticalAlignmentBottom:
             rc.origin.y = bounds.origin.y + bounds.size.height - rc.size.height;
             break ;
         default :
             rc.origin.y = bounds.origin.y + (bounds.size.height - rc.size.height)/ 2 ;
             break ;
     }
     
     return rc;
}
 
- ( void )drawTextInRect:(CGRect)rect
{
     CGRect rc = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
     [ super drawTextInRect:rc];
}
 
//调整文本中的行距的方法
 
/*使用方法
  *
  *text参数 :文本内容
  *
  *height参数:行距
  *
  *name 参数:你使用的 UIlable 对象
  */
- ( void ) getlable_height :(NSString *) text uiheight:(NSInteger) height uilable:(UILabel*) name
{
     NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
     
     [paragraphStyle setLineSpacing:height]; //调整行间距
     
     [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange( 0 , [text length])];
     name.attributedText = attributedString;
     
}
 
@end


3、测试结果

 

 

?
1
2
3
4
5
6
7
8
9
<span style= "font-size:18px;" >- ( void )viewDidLoad {
     [ super viewDidLoad];
     
     DpLabel *label = [[DpLabel alloc] initWithFrame:CGRectMake( 20 , 120 , self.view.frame.size.width- 40 , 50 )];
     label.text = @测试对齐方式;
     label.textAlignment = VerticalAlignmentTop;
     label.backgroundColor = [UIColor redColor];
     [self.view addSubview:label];
}</span>



 

(1)测试垂直顶端对齐方式,测试结果如下:

\

(2)测试顶端居中对齐方式,测试结果如下:

\

(3)测试顶端靠右对齐方式,测试结果如下:

\

转自:http://www.2cto.com/kf/201506/408343.html

转载于:https://www.cnblogs.com/freeleader/p/7389580.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值