iOS開發UILabel的公共屬性及拓展屬性
阿新 • • 發佈:2017-08-18
分享 十個 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的公共屬性及拓展屬性