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

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

分享 十個 con copy atomic tin 方法 lba mode

在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

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