1. 程式人生 > >IOS UILabel的公共屬性及拓展屬性

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

相關推薦

iOS開發UILabel公共屬性拓展屬性

分享 十個 con copy atomic tin 方法 lba mode 在IOS開發的過程中,UILabel是很常用的一個控件,同時也是大量使用的一個控件。創建一個UILabel一般需要五六句代碼,如果我們需要創建幾十個UILabel,就意味著我們要寫五六十句代碼,其實

IOS UILabel公共屬性拓展屬性

前言          在IOS開發的過程中,UILabel是很常用的一個控制元件,同時也是大量使用的一個控制元件。建立一個UILabel一般需要五六句程式碼,如果我們需要建立幾十個UILabel,就意味著我們要寫五六十句程式碼,其實很多程式碼是重複的,我們可以把類似的程式

CSS Note 1.7 table屬性列表屬性

一、html  <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <

python中的property屬性魔法屬性

property屬性 通過以下程式碼來認識一下property class Foo: def func(self): pass # 定義property屬性 @property def prop(self

Page.IsPostBack 屬性AutoPostBack 屬性

現在從對ASP.NET頁面的執行順序開始,體會一下B/S結構的程式的特點,下圖是ASP.NET頁面的執行順序說明:  Page_Init(頁面初始化引發的事件)——>Page_Load(載入頁面時引發的事件)——>Control    Event(伺服器控制元件引發的事件)——>Page_U

iOS常用UI控制元件屬性簡單動畫

-通過center修改位置 -center是CGPoint型別,是view正中間的點 -通過frame修改大小 通過frame修改大小時左上角原點不動 -通過bounds修改大小

iOSUILabel字型加粗等屬性和特效

UILabel垂直居上對齊[label sizeToFit]; //設定文字過長時的顯示格式 label.lineBreakMode = UILineBreakModeWordWrap; typedefenum { UILineBreakM

Meta標簽中的format-detection屬性含義

format 數字 str strong 點擊 開啟 轉化 翻譯 pan format-detection翻譯成中文的意思是“格式檢測”,顧名思義, 它是用來檢測html裏的一些格式的,那關於meta的format-detection屬性主要是有以下幾個設置:   met

ArcGIS 網絡分析[4] 網絡數據集深入淺出之連通性、網絡數據集的屬性轉彎要素

我只 三方 功能 如何使用 網絡數據 block 性問題 網絡 屬性 前面介紹完了如何創建網絡數據集、如何使用網絡分析功能,當然還有的讀者會迷惑於一些更深層次的問題,比如網絡數據集的連通性問題等。 因為不可能面面俱到,我只能挑重點來闡述,我覺得網絡數據集的連通性、屬性和轉

bootstrap柵格系統的屬性使用

boot trap max-width ref err 媒體 idt ide class 柵格系統 媒體查詢 在柵格系統中,我們在 Less 文件中使用以下媒體查詢(media query)來創建關鍵的分界點閾值。 小屏幕(平板,大於等於 768px) @media

javascript字符串屬性常用方法總結

ring 方法總結 search lower 指定 you 數組 參數 world length屬性:str.length; 常用方法: 1. str.charAt(n) 查找字符串中的第n個字符,如果不在0~str.length-1之間,則返回一個空字符串 2 .st

學習筆記:Linux 文件和目錄屬性權限

學習筆記:linux 文件和目錄屬性及權限1 . Linux 中的文件1.1 文件屬性概述 在linux裡面一切皆文件!! Linux 系統中的文件或目錄的屬性主要包括:索引節點(inode)、文件類型、權限屬性、鏈接數、所歸屬的用戶和用戶組、最近修改時間等內容: 下面我們看一下執行ls- lhi的結果:[[

背景圖background的例子分析相關屬性

完全 attach 輸入 定位 以及 p s ... microsoft center 今天需要做一個占滿設備寬度的輪播圖,這裏作為demo僅展示一張圖,下面分別是要操作的圖片(這裏做了縮放處理,實際的圖比較大),以及要實現的效果圖,很明顯兩者是不成比例的:   (

JavaScript裏的Date 對象屬性對象方法--實現簡單的日歷

tor 個數 lin all date rip rec 說明 進行 上網搜索"js 日歷插件"就會出來各種效果的功能豐富的日歷插件,很多都可以下載源碼,然後根據各自的需求對源碼進行修改就可以直接用了. 但今天講的不是如何使用這些插件,而是講如何實現一個很簡單的只有當前這

CSS3常用屬性用法

rip watch code java ash nbsp chrom tran 替代 1.transition: 過渡屬性,可以替代flash和javascript的效果 兼容性:Internet Explorer 9 以及更早的版本,不支持 transition 屬性。

HTML5基礎知識匯總_(2)自己定義屬性表單新特性

一行 當前 down js日期 日期 mark 定義 ++ bing 自己定義屬性data-* 說起這個屬性,事實上如今非經常見了;怎麽說呢,由於在一些框架都能看到他的身影!!! 比方Jquery mobile,裏面非常頻繁的使用了這個屬性; 這個

spring-boot實戰【05】:Spring Boo多環境配置配置屬性註入到對象

num java red component 配置 cati 定義 fin row 項目工程結構: 配置文件application.properties文件 com.yucong.blog.name=yucong com.yucong.blog.title=Spring

CSS3景深、三維變換屬性旋轉三維立方體的實現

場景 htc 學歷 ati light range frame 焦距 說道 瀏覽器坐標系 在講正式語法之前,首先需要了解瀏覽器坐標系 這需要我們把瀏覽器界面想象成一個立體的場景 這是網上流傳很廣的瀏覽器坐標系圖片 從左到右的方向是瀏覽器x軸的正方向 從上到下的方向是瀏覽器

知識總結之form表單屬性H5新增特性

bsp ron mit 驗證 pick -s value 地址欄 屬性 一、form的幾大屬性   1.method屬性     規定用於發送 form-data 的 HTTP 方法,即請求的方式;主要用來提交參數與後臺數據進行交互。     分為GET和POST兩種方式,

比較兩個對象屬性屬性

bject ace ive args main authorize code pre cer import java.lang.reflect.Method; private static Object getFieldValue(Object thisClass, St