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

前言

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

一、创建UILabel公共的方法

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

+ (UILabel *)commonLabelWithFrame:(CGRect)frame
                             text:(NSString*)text
                            color:(UIColor*)color
                             font:(UIFont*)font
                    textAlignment:(NSTextAlignment)textAlignment;

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

+ (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、头文件申明方法如下:

/**
 *  创建一个动态高度的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、源文件中实现该方法:

//动态设置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、测试结果:

- (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、头文件申明方法如下:

@interface DpLabel : UILabel

typedef enum{
    VerticalAlignmentTop = 0, //default 垂直顶端对齐
    VerticalAlignmentMidele,  //顶端居中对齐
    VerticalAlignmentBottom,  //顶端靠右对齐
}VerticalAlignment;

@property (nonatomic, assign) VerticalAlignment verticalAlignment;

2、源文件实现该方法:

#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、测试结果

<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://download.csdn.net/detail/u010545480/8808451

时间: 2024-10-14 07:29:49

IOS UILabel的公共属性及拓展属性的相关文章

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

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

IOS UILabel属性

1  textAlignment有三种设置方式:(以UI开头,是ios6之前的用法) (1)  NSTextAlignmentLeft        为向左对齐 (2)  NSTextAlignmentCenter    为居中对齐 (3)  NSTextAlignmentRight      为向右对齐 2  linBreakMode(可选值) (当文本内容很多,label无法全部显示时label会将文本内容以省略号的方式代替) enum{ NSLineBreakByWordWrapping 

iOS 应用数据存储方式(XML属性列表-plist)

iOS 应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其他应用不能访问该

ios应用数据存储方式(XML属性列表-plist)

ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其他应用不能访问该沙

iOS开发UI篇—UITableView的常用属性与方法

UITableView UITableView内置了两种样式:UITableViewStylePlain,UITableViewStyleGrouped <UITableViewDataSource,UITableViewDelegate>里的方法: tableView处理步骤 #pragma mark 1.有多少组 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView #pragma mark 2.第section

iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist

iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist) 一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对象,要编写一些数据库的语句,将对象拆开存储) 5.Core Data(对象型的数据库,把内部环节屏蔽) 二.应用沙盒 每个iOS应用都有?己的应?沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应?必须待在?己的沙盒里,其

iOS 成员变量,实例变量,属性变量的区别,联系

在ios第一版中: 我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: 注意:(这个是以前的用法) @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton; @end 在现在iOS版本中: 苹果将默认编译器从GCC转换为LLVM(low leve

iOS UIButton同时设置title和image属性

在iOS开发中,使用UIButton设置title和image,达到tabBarItem的效果,即title在下,image在上: 目前,我发现有两种比较好的方法: 方法一,使用UIEdgeInsets UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem]; [button setFrame:CGRectMake(100, 100, 60, 60)]; [button setBackgroundColor:[UIColor

ios的@property属性和@synthesize属性(转)

当你定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,,所以Xcode提供了@property 和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现. 如下,新建一个基于"Command Line Tool"的项目,名为"property",再新建一个Student类, 传统的写法是: Student.h [cpp] view plaincopy //