Objective-C:文本標簽(UILabel)

常用屬性和方法有:

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];?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容