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

时间: 2024-07-30 07:20:43

iOS开发UILabel的公共属性及拓展属性的相关文章

IOS UILabel的公共属性及拓展属性

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

iOS开发 UILabel实现自适应高宽

UILabel是iOS开发常用的控件.UILabel的属性需要了解,UILabel的特殊显示效果也需要我们掌握.UILabel自适应高宽度是很多初学者遇到的技术性难题.比如段文字,要让他完全地分行显示且要让后面的控件不被遮挡.这需要我们的UILabel能够自适应高宽,以便完全显示text的内容,后面的控件可以获取UILabel的起始坐标和宽高来重新设置frame来达到紧贴着UILabel显示而不被遮挡. 工具/原料 Mac OS X操作系统::OS X 10.11.5 编译环境:Xcode 7.

iOS开发UILabel的常用属性和方法

// //  ViewController.m //  LabelAll // #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; UILabel *myLabel =

iOS开发- UILabel 自动换行 及 高度自适应

UILabel * testlable = [[UILabel alloc]initWithFrame:CGRectMake(10,20,200,20)]; NSString * tstring [email protected]"UILabel  ios7 与ios7之前实现自适应撑高的方法,文本的内容长度不一,我们需要根据内容的多少来自动换行处理.在IOS7下要求font,与breakmode与之前设置的完全一致sizeWithFont:font constrainedToSize:size

iOS开发--UILabel可以显示\n

1 UILabel*label; 2 3 //设置换行 4 label.lineBreakMode = UILineBreakModeWordWrap; 5 label.numberOfLines = 0; 6 7 换行符还是“\n” 8 比如NSString * xstring=@"lineone\nlinetwo" 9 10 如果内容是从HTTP返回数据,且换行失败,可以考虑用以下方法测试: 11 12 NSString *myNewLineStr = @"\n"

iOS开发-UILabel和UIButton添加下划线

关于UILabel和UIButton有的时候需要添加下划线,一般有两种方式通过默认的NSMutableAttributedString设置,第二种就是在drawRect中画一条下划线,本文就简单的选择第一种,第二种有兴趣的可以自己研究一下. UILabel设置下划线: UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 310, 50)]; label.backgroundColor = [UIColor red

iOS开发——实用技术OC篇&amp;给分类增加属性

给分类增加属性 关于分类的创建这里就不扯了,咱们直接开干 这里以文本看占位文字颜色为例一:简单方式(关键技术:KVC)1.在头文件定义一个属性 1 @property (nonatomic, strong) UIColor *placeholderColor; 2 /** 3 * 分类中只会产生属性对应Setter和Getter方法的声明,不会有实现,需要我们自己实现 4 */ 5 //-(void)setPlaceholderColor:(UIColor *)placeholderColor;

iOS开发之修改动画对象的元素属性

步骤:1.使用single view application创建新的项目 2.在.h文件中使用UIimageview创建两个图片实例对象,使用UIDynamicAnimator创建动画对象 3.在.m中实现相关的代码 在.h文件中 在.文件中

iOS开发基础知识--碎片32

 iOS开发基础知识--碎片32 1:动画属性UIViewAnimationOptions说明 a:常规动画属性设置(可以同时选择多个进行设置) UIViewAnimationOptionLayoutSubviews:动画过程中保证子视图跟随运动. UIViewAnimationOptionAllowUserInteraction:动画过程中允许用户交互. UIViewAnimationOptionBeginFromCurrentState:所有视图从当前状态开始运行. UIViewAnimat