1. 程式人生 > >uilabel 的相關處理 類富文字(自動換行,設定行高,同一個label多種顏色,給文字加下劃線 首行縮排 等 等)

uilabel 的相關處理 類富文字(自動換行,設定行高,同一個label多種顏色,給文字加下劃線 首行縮排 等 等)

1.自動換行

UIFont *font=[UIFont systemFontOfSize:lableFont];
self.numberOfLines=0;
self.lineBreakMode=NSLineBreakByWordWrapping;
self.text=content;
self.font=font;
self.textColor=color;
CGSize sizeW=[content sizeWithFont:font constrainedToSize:lableSize lineBreakMode:NSLineBreakByWordWrapping];
self.frame=CGRectMake(self.frame.origin.x, self.frame.origin.y, sizeW.width, sizeW.height);// 此處的 siezeW.with  可以根據需要 設定為 你想要的寬度 如在cell 中讓他為300 或者200 等等 此處設定為siezeW.with 是為了 讓label 適應寬度   同樣的在cell 中 為了讓cell 自適應高度 只要將 cell的高度設定為 sizeW.height  就可以了

有時候根據工程需求 需要根據比如“冒號” “ 分號”等換行 就可以使用

//  根據 冒號 分號等的分行 顯示   \r\n即為分行 把想換行的特殊符號 換為\r\n 就可以瞭然後在加上上面的就可以根據你字串的內容自動換行了
NSString *str = [str1 stringByReplacingOccurrencesOfString:@";" withString:@"\r\n"];

2.調整uilabel 行高間距

UILabel *contenLable=[[UILabel alloc]initWithFrame:CGRectMake(10, 5, 300, 310)];
contenLable.textColor=[Utils getDarkColor];
contenLable.font=[UIFont systemFontOfSize:13];

contenLable.lineBreakMode=UILineBreakModeWordWrap;
contenLable.numberOfLines=0;
// 設定字型間每行的間距
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineHeightMultiple = 15.0f;
paragraphStyle.maximumLineHeight = 15.0f;
paragraphStyle.minimumLineHeight = 15.0f;
paragraphStyle.lineSpacing = 4.0f;// 行間距
NSString *string = @"此處的 siezeW.with  可以根據需要 設定為 你想要的寬度 如在cell 中讓他為300 或者200 等等 此處設定為siezeW.with 是為了 讓label 適應寬度   同樣的在cell 中 為了讓cell 自適應高度 只要將 cell的高度設定為 sizeW.height  就可以了";
NSDictionary *ats = @{
NSParagraphStyleAttributeName : paragraphStyle,
};
contenLable.attributedText = [[NSAttributedString alloc] initWithString:string attributes:ats];

[view addsubview: contenLabel];

3.對label 新增下劃線同一個label 多種顏色 

 新增下劃

NSMutableAttributedString *content = [[NSMutableAttributedString alloc]initWithString:str];
NSRange contentRange = { 0,[content length]};
[content addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:contentRange];

 新增 顏色  只有在ios 7上可以

// NSRange contentRangenew = {0,2};
// [content addAttribute:NSForegroundColorAttributeName value:(id)[[UIColor blueColor]CGColor] range:contentRangenew];
// NSRange conw = {4,19};
// [content addAttribute:NSForegroundColorAttributeName value:(id)[[UIColor blackColor]CGColor] range:conw];

Label.attributedText = content;

4.總結以上

NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentJustified;//設定對齊方式
paragraph.lineBreakMode = NSLineBreakByWordWrapping;

NSAttributedString的初始化方法有

   -initWithString:用String初始化,並沒有Attributed資訊。
   -initWithAttributedString:用AttributedString去初始化。
  -initWithString:Attributed:用string及attribute的dictionary來初始化。

具體AttributtedString屬性的鍵值對如下:

   NSString *const NSFontAttributeName;//值為UIFont,設定字型,預設值為12-point Helvetica(Neue) 。
NSString *const NSParagraphStyleAttributeName;//值為NSParagraphStyle,設定段落屬性,預設值為[NSParagraphStyle defaultParagraphStyle]返回的值。

NSMutableParagraphStyle與NSParagraphStyle包括一下屬性

alignment //對齊方式
firstLineHeadIndent //首行縮排
headIndent //縮排
tailIndent //尾部縮排
lineBreakMode //斷行方式
maximumLineHeight //最大行高
minimumLineHeight //最低行高
lineSpacing //行距
paragraphSpacing //段距
paragraphSpacingBefore //段首空間
baseWritingDirection //句子方向
lineHeightMultiple //可變行高,乘因數。
hyphenationFactor //連字元屬性
NSString *const NSForegroundColorAttributeName;//值為UIColor,字型顏色 預設黑色

NSString *const NSBackgroundColorAttributeName;//值為UIColor,字型背景色,預設沒有。

NSString *const NSLigatureAttributeName;//值為整型NSNumber,連字屬性,一般中文用不到,在英文中可能出現相鄰字母連筆的情況。0為不連筆;1為預設連筆,也是預設值;2在ios 上不支援。

NSString *const NSKernAttributeName;//值為浮點數NSNumber,字距屬性,預設值為0。

NSString *const NSStrikethroughStyleAttributeName;//值為整型NSNumber,可取值為
enum {
NSUnderlineStyleNone = 0×00,
NSUnderlineStyleSingle = 0×01,
};設定刪除線。

NSString *const NSUnderlineStyleAttributeName;//同上。設定下劃線。

NSString *const NSStrokeColorAttributeName;//值為UIColor,預設值為nil,設定的屬性同ForegroundColor。

NSString *const NSStrokeWidthAttributeName;//值為浮點數NSNumber。設定比畫的粗細。

NSString *const NSShadowAttributeName;//值為NSShadow,設定比畫的陰影,預設值為nil。

NSString *const NSVerticalGlyphFormAttributeName;//值為整型NSNumber,0為水平排版的字,1為垂直排版的字。

首行縮排舉例子

NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];// 下面就可以設定他的各種屬性了
paragraph.firstLineHeadIndent = 20;// 這裡  只是設定了首行縮排  我這裡設定首行縮排 20 縮排兩個字  根據需求可以調節縮排的大小
NSDictionary *ats = @{
NSParagraphStyleAttributeName : paragraph,
};
Label.attributedText = [[NSMutableAttributedString alloc]initWithString:str attributes:ats];