iOS開(kāi)發(fā)中經(jīng)常會(huì)用到UILabel來(lái)展示一些文字性內(nèi)容涉枫,默認(rèn)的排版方式會(huì)有些擠,這里來(lái)介紹一下如何給UILabel設(shè)置行間距和字間距腐螟,歡迎大家多提意見(jiàn)愿汰,共勉??????
實(shí)現(xiàn)方法
設(shè)置行間距困后,字間距等都是對(duì)字符串的處理,這里需要用到富文本NSAttributedString或NSMutableAttributedString衬廷,設(shè)置其屬性即可摇予。
創(chuàng)建label備用:
NSString*textContent =@"人生若只如初見(jiàn),何事秋風(fēng)悲畫扇吗跋。等閑變卻故人心侧戴,卻道故人心易變。驪山語(yǔ)罷清宵半跌宛,淚雨零鈴終不怨酗宋。何如薄幸錦衣郎,比翼連枝當(dāng)日愿疆拘。";//labelUILabel*testLabel = [[UILabelalloc] initWithFrame:CGRectMake(20,100,self.view.frame.size.width-20*2,300)];//多行顯示testLabel.numberOfLines =0;? ? testLabel.backgroundColor = [UIColorlightGrayColor];? ? [self.view addSubview:testLabel];//富文本屬性NSMutableDictionary*textDict = [NSMutableDictionarydictionary];//基本屬性設(shè)置//字體顏色textDict[NSForegroundColorAttributeName] = [UIColorblackColor];//字號(hào)大小textDict[NSFontAttributeName] = [UIFontsystemFontOfSize:16.0];
行間距:
設(shè)置行間距需要用到NSMutableParagraphStyle蜕猫,NSMutableParagraphStyle用于設(shè)定文本段落有關(guān)的設(shè)置,比如行間距哎迄,文本縮進(jìn)回右,段間距等,用法如下:
//段落樣式NSMutableParagraphStyle*paraStyle = [[NSMutableParagraphStylealloc] init];//行間距paraStyle.lineSpacing =10.0;//首行文本縮進(jìn)paraStyle.firstLineHeadIndent =20.0;//使用//文本段落樣式textDict[NSParagraphStyleAttributeName] = paraStyle;
字間距:
直接修改NSAttributedString芬失,或者NSMutableAttributedString的NSKernAttributeName屬性即可楣黍,用法如下:
//字間距(字符串)textDict[NSKernAttributeName] = @(1);
賦值:
//賦值testLabel.attributedText = [[NSAttributedStringalloc] initWithString:textContent attributes:textDict];
效果如下:
行間距匾灶,字間距
計(jì)算文本高度(有行間距的情況下)
記住你對(duì)label的設(shè)置棱烂,計(jì)算高度時(shí)傳入字符串,寬度和富文本的屬性(字典類型)即可阶女。
-(CGFloat)getSpaceLabelHeight:(NSString*)str withAttrDict:(NSMutableDictionary*)dict withWidth:(CGFloat)width {CGSizesize = [str boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOriginattributes:dict context:nil].size;returnsize.height;}
NSMutableParagraphStyle補(bǔ)充
NSMutableParagraphStyle功能很強(qiáng)大颊糜,還有很多屬性可以用,比如:
//段落行距//paragraphStyle.lineSpacing = 10; //非首行文本縮進(jìn)? ? ? ? ? ? ? ? //paragraphStyle.headIndent = 5;? // 文本縮進(jìn)(右端)? ? ? ? ? ? ? ? //paragraphStyle.tailIndent = -20;? // 首行文本縮進(jìn)? ? ? ? ? //paragraphStyle.firstLineHeadIndent = 20;? //文本對(duì)齊方式? ? ? ? //paragraphStyle.alignment = NSTextAlignmentRight;? //折行方式//paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; //文本寫入方式//paragraphStyle.baseWritingDirection = NSWritingDirectionLeftToRight; //文本行間距 是默認(rèn)行間距的多少倍//paragraphStyle.lineHeightMultiple = 3.0; //文本最大行距? ? ? ? //paragraphStyle.maximumLineHeight = 50;? //文本最小行距? ? ? //paragraphStyle.minimumLineHeight = 50; /*
allowsDefaultTighteningForTruncation(收縮字符間距允許截?cái)啵?/p>
*///paragraphStyle.allowsDefaultTighteningForTruncation = YES; // 設(shè)置每行的最后單詞是否截?cái)嗤翰龋?.0-1.0之間衬鱼,默認(rèn)為0.0,越接近1.0單詞被截?cái)嗟目赡苄栽酱螅?/paragraphStyle.hyphenationFactor = 1.0; //段落后面的間距//paragraphStyle.paragraphSpacing = 10; //設(shè)置段與段之間的距離? ? ? ? ? //paragraphStyle.paragraphSpacingBefore = 20;? ? ?
富文本屬性補(bǔ)充
/*
? ? 刪除線和下劃線
? ? 枚舉常量 NSUnderlineStyle中的值
? ? NSUnderlineStyleNone? ? ? ? //不設(shè)置刪除線
? ? NSUnderlineStyleSingle? ? ? // 設(shè)置刪除線為細(xì)單實(shí)線
? ? NSUnderlineStyleThick? ? ? //? 設(shè)置刪除線為粗單實(shí)線
? ? NSUnderlineStyleDouble? ? // 設(shè)置刪除線為細(xì)雙實(shí)線
? ? NSUnderlinePatternSolid
? ? NSUnderlinePatternDot? ? //點(diǎn)
? ? NSUnderlinePatternDash? //虛線
? ? NSUnderlinePatternDashDot? //虛線和點(diǎn)
? ? NSUnderlinePatternDashDotDot? //虛線和點(diǎn)點(diǎn)
? ? NSUnderlineByWord
? ? */// NSNumber憔杨,加刪除線鸟赫,默認(rèn)不加刪除線,其它的話是加不同風(fēng)格的刪除線dict[NSStrikethroughStyleAttributeName] = @(NSUnderlinePatternSolid|NSUnderlineStyleSingle);//UIColor,刪除線顏色消别,默認(rèn)等于文本前景顏色,前提是需要加刪除線抛蚤,和NSStrikethroughStyleAttributeName有關(guān)dict[NSStrikethroughColorAttributeName] = [UIColoryellowColor];// NSNumber,加下劃線寻狂,默認(rèn)NSUnderlineStyleNone不加下劃線岁经,其它的話是加不同的下劃線dict[NSUnderlineStyleAttributeName] = @(NSUnderlineStyleDouble);// UIColor,下劃線顏色,默認(rèn)等于文本前景顏色,前提是需要加下劃線蛇券,和NSUnderlineStyleAttributeName有關(guān)dict[NSUnderlineColorAttributeName] = [UIColoryellowColor];// UIColor,默認(rèn)等于文本前景顏色缀壤,需要和NSStrokeWidthAttributeName一起使用dict[NSStrokeColorAttributeName] = [UIColoryellowColor];// NSNumber,使文本有一種中空的效果(有立體效果)數(shù)字越大樊拓,文本填充的越滿,數(shù)字越小塘慕,文本顏色越淡筋夏,不需要和NSStrokeColorAttributeName一起使用dict[NSStrokeWidthAttributeName] = @5;/*
? ? 文本陰影
? ? NSShadow *shadow = [[NSShadow alloc] init];
? ? shadow.shadowOffset = CGSizeMake(2, 3);? ? ? 陰影偏移量
? ? shadow.shadowColor = [UIColor yellowColor];? 陰影顏色
? ? shadow.shadowBlurRadius = 1.0;? ? ? ? ? ? ? 陰影圓角
? ? */// NSShadow,默認(rèn)沒(méi)有陰影,dict[NSShadowAttributeName] = shadow;// NSNumber,文本字間距(字與字之間的距離)dict[NSKernAttributeName] = @10;// NSURL或者是鏈接字符串,文本鏈接樣式图呢,自帶下劃線叁丧,文本顏色是藍(lán)色dict[NSLinkAttributeName] = [NSURLURLWithString:@"http:baidu.com"];// NSURL或者是鏈接字符串,文本鏈接樣式,自帶下劃線岳瞭,文本顏色是藍(lán)色dict[NSLinkAttributeName] =@"http:baidu.com";// NSNumber拥娄,本文的擴(kuò)張倍數(shù),負(fù)數(shù)的話相當(dāng)于縮小dict[NSExpansionAttributeName] = @(-0.5);// NSNumber瞳筏,本文的斜體程度以及斜體方向稚瘾,默認(rèn)0不歪斜,負(fù)數(shù)相當(dāng)于右斜姚炕,正數(shù)相當(dāng)于左斜摊欠,歪斜的程度由數(shù)字的大小決定dict[NSObliquenessAttributeName] = @(0.7);// NSNumber,行文本基線的偏移量dict[NSBaselineOffsetAttributeName] = @(15.0);// 貌似是文本寫入方向dict[NSWritingDirectionAttributeName] = @[@(NSWritingDirectionOverride),@(NSWritingDirectionRightToLeft)];// 文本的垂直與水平,目前在iOS,它總是水平柱宦,任何其他值的行為是未定義的dict[NSVerticalGlyphFormAttributeName] = @(1);// 在文本中插入表情NSTextAttachment*textAtt = [[NSTextAttachmentalloc] init];? ? textAtt.image = [UIImageimageNamed:@"cloud.png"];? ? dict[NSAttachmentAttributeName] = textAtt;
本文為轉(zhuǎn)載的出處再下方??
作者:林夕不昔
鏈接:http://www.reibang.com/p/badee2350860
來(lái)源:簡(jiǎn)書
簡(jiǎn)書著作權(quán)歸作者所有些椒,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。