常用屬性和方法有:
1、創建
CGRect rect = CGRectMake(100,200,50,50);
UILabel *label = [[UILabel alloc] initWithFrame:rect]; //創建alloc
label.tag =101; //設置label的標記(tag)
label.userInteractionEnabled = YES;//是否能與用戶交互
2、text//設置和讀取文本內容,默認為nil
label.text = @”文本信息”;//設置內容
NSLog(@”%@”, label.text);//讀取內容
3、textColor//設置文字顏色,默認為黑色
lable.textColor = [UIColor redColor];
4、font//設置字體大小,默認17
label.font = [UIFont systemFontOfSize:20];//?一般方法
label.font = [UIFont boldSystemFontOfSize:20];//加粗方法
label.font = [UIFont fontWithName:@"Arial"size:16];//指定字體的方法//還有?一種從外部導入字體的方法。
5、textAlignment//設置標簽文本對齊方式。
label.textAlignment = NSTextAlignmentCenter;
textAlignment有三種設置方式:
NSTextAlignmentLeft為向左對齊
NSTextAlignmentCenter為居中對齊
NSTextAlignmentRight為向右對齊
注:UITextAlignmentCenter/UITextAlignmentLeft/UITextAlignmentRight,那是iOS6以前的用法,iOS6的最新用法已改
6、numberOfLines//標簽最多顯示行數,如果為0則表示多行,沒有最大行數限制。
label.numberOfLines =2;
7、enabled//只是決定了Label的繪制方式,將它設置為NO將會使文本變暗,表示它沒有激活,這時向它設置顏色值是無效的。
label.enable = NO;
8、highlighted//是否高亮顯示
label.highlighted = YES;
label.highlightedTextColor = [UIColor orangeColor];//高亮顯示時的文本顏色
9、ShadowColor//設置陰影顏色
[label setShadowColor:[UIColor blackColor]];
10、ShadowOffset//設置陰影偏移量
[label setShadowOffset:CGSizeMake(-1,-1)];
11、baselineAdjustment//如果adjustsFontSizeToFitWidth屬性設置為YES,這個屬性就來控制文本基線的行為。
label.baselineAdjustment = UIBaselineAdjustmentNone;
baselineAdjustment可設置:
UIBaselineAdjustmentAlignBaselines =0,默認,文本最上端與中線對齊。
UIBaselineAdjustmentAlignCenters, 文本中線與label中線對齊。
UIBaselineAdjustmentNone, 文本最低端與label中線對齊。
12、Autoshrink ?//是否自動收縮Fixed Font Size 默認,如果Label寬度小于文字長度時時,文字大小不自動縮放minimumScaleFactor 設置最小收縮比例,如果Label寬度小于文字長度時,文字進行收縮,收縮超過比例后,停止收縮。
minimumFontSize 設置最小收縮字號,如果Label寬度小于文字長度時,文字字號減小,低于設定字號后,不再減小。
//6.0以后不再使用了。
label.minimumScaleFactor =0.5;
label1.minimumFontSize = 10.0;//最小字體,行數為1時有效,默認為0.0
13、adjustsLetterSpacingToFitWidth//改變字母之間的間距來適應Label大小
myLabel.adjustsLetterSpacingToFitWidth = NO;
14、 lineBreakMode//設置文字過長時的顯示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符為顯示單位顯示,后面部分省略不顯示。
label.lineBreakMode = NSLineBreakByClipping;剪切與文本寬度相同的內容長度,后半部分被刪除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字以……方式省略,顯示尾部文字內容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中間的內容以……方式省略,顯示頭尾的文字內容。
label.lineBreakMode = NSLineBreakByTruncatingTail;結尾部分的內容以……方式省略,顯示頭的文字內容。
label.lineBreakMode = NSLineBreakByWordWrapping;以單詞為顯示單位顯示,后面部分省略不顯示。
15、 adjustsFontSizeToFitWidth//設置字體大小適應label寬度
注:文本自動根據label大小自動調整字體尺寸:adjustFontSizeToFitWidth方法可實現文本自動根據label大小自動調整字體尺寸,直到文本的大小達到了自己設置的label文本尺寸最大、最小值與字符串的最大最小值,要是用這個方法還有一個很大的限制就是只有在numberOfLines設置為1時才能用
label.numberOfLines =1;?
label.adjustsFontSizeToFitWidth = YES;
如果行數是超過了1行,要實現自動調整字體大小功能,就沒有可以自適應的系統方法可以使用,只有自己用代碼實現,在設計時因為要考慮到手機屏幕的實際大小有限,如果字體太小會影響用戶體驗,所以要設置一個最小字號的判斷,小于最小字號就要用到縮略顯示,下面的代碼中主要是用到?
CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(100, 180) lineBreakMode:NSLineBreakByCharWrapping];
來得到字體在某一字號下的高度,判斷與label高度是否一致,其中text是輸入label的文本內容,sizWithFont設置字體,constrainedToSize設置約束文本的矩形大小參數,其中寬度要和label一致,高度設置要足夠高,要比label高很多,否則會出現文本顯示不全的問題,lineBreakMode的作用上文有講過。如果算出的高度超出了label高度,就把字號以循環的方式減小直到高度符合就跳出循環。
? floatmaxHeight =50;//設置最大高度?
??floatminFontSize =9;?
??floatheight;?
??intfontSize = 31;//設置最大字號?
??NSString *text = @"輸入文本內容";?
??do{?
????????fontSize = fontSize - 1;?
? ? ? ? UIFont *font =[UIFont fontWithName:@"Arial"size:fontSize];?
? ? ? ? ?CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(100, 180)/*寬度與label的寬度一樣,高度應高于label高度*/lineBreakMode:NSLineBreakByCharWrapping];?
????????height = size.height;?
????????NSLog(@"height=%f,fontSize=%d,text=%@",height,fontSize,text);?
??} while(height > maxHeight&&fontSize>minFontSize);?
? UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 50)];?
??label.text =text;?
??if(fontSize ==9) {//判斷字體是否小于最小字號,小于最小字號時就使用系統默認的縮略顯示?
????????label.font = [UIFont fontWithName:@"Arial"size:15];?
??}?
??else{?
??????label.font = [UIFont fontWithName:@"Arial"size:fontSize];?
??????label.lineBreakMode = NSLineBreakByCharWrapping;//實現文字多行顯示?
??????label.numberOfLines = 0;?
??}?
??[self.view addSubview:label];
根據文本數量自動調整label高度
其實就是用上面的方法得到高度再生成label
?NSString *text =[[NSString alloc]init];?
?text = @"輸入文本內容";?
?CGSize size = CGSizeMake(280, 180);?
?UIFont *fonts = [UIFont systemFontOfSize:14.0];?
?CGSize msgSie = [text sizeWithFont:fonts constrainedToSize:size lineBreakMode: NSLineBreakByCharWrapping];?
?UILabel *textLabel = [[UILabel alloc] init];?
?[textLabel setFont:[UIFont boldSystemFontOfSize:14]];?
?textLabel.frame = CGRectMake(20,70, 280,msgSie.height);?
?textLabel.text = text;?
?textLabel.lineBreakMode = NSLineBreakByCharWrapping;//實現文字多行顯示?
?textLabel.numberOfLines = 0;?
?[self.view addSubview:textLabel];?
16、attributedText:設置標簽屬性文本。
NSString *text = @"first";
NSMutableAttributedString *textLabelStr =[[NSMutableAttributedString alloc]initWithString:text];
[textLabelStr setAttributes:@{NSForegroundColorAttributeName :[UIColor lightGrayColor], NSFontAttributeName :[UIFont systemFontOfSize:17]} range:NSMakeRange(11,10)];
label.attributedText = textLabelStr;
17、豎排文字顯示每個文字加一個換行符,這是最方便和簡單的實現方式。
label.text = @"請\n豎\n直\n方\n向\n排\n列";
label.numberOfLines = [label.text length];
18、計算UIlabel 隨字體多行后的高度
CGRect bounds = CGRectMake(0,0,200,300);
heightLabel = [myLabel textRectForBounds:boundslimitedToNumberOfLines:20];//計算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);
19、UILabel根據字數多少自動實現適應高度
UILabel *msgLabel = [[UILabel alloc]initWithFrame:CGRectMake(15,45,0,0)];
msgLabel.backgroundColor = [UIColor lightTextColor];
[msgLabel setNumberOfLines:0];
msgLabel.lineBreakMode = UILineBreakModeWordWrap;
msgLabel.font = [UIFont fontWithName:@"Arial"size:12];
CGSize size = CGSizeMake(290,1000);
msgLabel.text = @"有天我睡醒看到我的身邊沒有你在我的右邊是你曾經喜歡的玩具可當我站起身來在房間里尋找你留下的只有帶著你味道的一封信就在昨天還一起看我們的照片可現在讓我感覺像爛劇里的主演為什么這種事情會發生在我身邊是不是老天沒能看到對你的瘋癲";
CGSize msgSie = [msgLabel.text sizeWithFont:fontsconstrainedToSize:size];
[msgLabel setFrame:CGRectMake(15,45,290, msgSie.height)];
20、漸變字體Label
UIColor *titleColor = [UIColor colorWithPatternImage:[UIImageimageNamed:@"btn.png"]];
NSString *title = @"Setting";
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,80,44)];
titleLabel.textColor = titleColor;
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.backgroundColor = [UIColor clearColor];
[self.view addSubview:titleLabel];
[titleLabel release];
21、Label添加邊框
titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];//邊框顏色,要為CGColor
titleLabel.layer.borderWidth =2;//邊框寬度
22、當label大小使用sizeToFit方法,調整大小時會考慮到該屬性中存儲的值。例如,如果此屬性設置為3,sizeToFit方法會調整label使它大到足以顯示三行文本。
[label sizeToFit];
23、設置label圓角
label.layer.cornerRadius = 10;?
24、設置label背景顏色
label.backgroundColor =[UIColor yellowColor];
25、設置label背景圖
第一種方法:設置背景圖可以把一張大小與label一樣的圖放在label的后面一層,然后把label的背景設置為透明,這樣實現label有背景(這個是一個有點不正統的方法)
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 200, 400)];?
UIImageView *imageView =[[UIImageView alloc]init];?
imageView.frame =CGRectMake(50, 50, 200, 400);?
UIImage *image=[UIImage imageNamed:@"1.jpg"];?
imageView.image =image;//imageView會根據自身大小改變添加的圖片的大小所以不需要額外設置image?
label.backgroundColor = [UIColor clearColor];?
label.text =@"hello world";?
label.font = [UIFont systemFontOfSize:30];?
label.textColor = [UIColor yellowColor];?
[self.view addSubview:imageView];//添加的順序不能錯,否則圖片會覆蓋label?
[self.view addSubview:label];
第二種方法:用UIColor設置圖片,然后把UIColor作為背景顏色,就可以實現label設置背景圖
UIColor * color = [UIColor colorWithPatternImage:image];//image為需要添加的背景圖?
?UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 200)];?
?[label setBackgroundColor:color];?
?[self.view addSubview:label];?
但是!!!!!第二個方法有一個嚴重的缺陷,就是當背景圖的尺寸與label大小不一致時,會出現背景圖被部分截取或者平鋪重復的情況,所以更完善的方法是要先修改好背景圖的大小與label大小一致再設置背景顏色。可以用下面的函數設置image尺寸
-(UIImage *)scaleImage:(UIImage *)img ToSize:(CGSize)itemSize{?
??????UIImage *i;?
??????// 創建一個bitmap的context,并把它設置成為當前正在使用的context?
??????UIGraphicsBeginImageContext(itemSize);?
??????CGRect imageRect=CGRectMake(0, 0, itemSize.width, itemSize.height);?
??????// 繪制改變大小的圖片?
??????[img drawInRect:imageRect];?
??????// 從當前context中創建一個改變大小后的圖片?????
??????i=UIGraphicsGetImageFromCurrentImageContext();?
??????// 使當前的context出堆棧?
??????UIGraphicsEndImageContext();?
??????// 返回新的改變大小后的圖片?
??????returni;?
}?
然后在主函數中調用即可
? CGSize size= CGSizeMake(100, 200);?
??UIImage *image =[UIImage imageNamed:@"1.jpg"];?
??UIImage *laterImage =[self scaleImage:image ToSize:size];?
??UIColor * color = [UIColor colorWithPatternImage:laterImage];?
??UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(50, 50, 100, 200)];?
??[label setBackgroundColor:color];?
??[self.view addSubview:label];?