iOS富⽂本属性NSMutableAttributedString使⽤详解
前⾔:
在iOS中,显⽰⼀段字符串通常会使⽤UILabel,但是它对⽂字的展现⽅式⽐较单⼀,有的时候需要展⽰⼀些特殊的形式,此时NSMutableAttributedString可以很好地满⾜使⽤要求。它⼀共提供了21⽅法可以选择使⽤,下⾯我将⼀⼀介绍。
⼀:属性介绍
1:N SPa r a gr a phStyleAttr ibuteN a me 段落排版
phStyleAttributeN
设置⽂本段落排版格式,取值为 NSParagraphStyle 对象,该属性在⼀段⽂本上应⽤多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle ⽅法返回的默认段落属性。
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.firstLineHeadIndent = 20;
照片冲洗
style.lineSpacing = 20;
style.alignment = NSTextAlignmentCenter;
2:N SFo ntAttr ibuteN a me 字体属性
m e 字体属性
该属性所对应的值是⼀个 UIFont 对象。该属性⽤于改变⼀段⽂本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。
3:N SFo r egr o undCo lo rAttributeN a m 字体颜⾊
平行四边形有多少条高
该属性所对应的值是⼀个 UIColor 对象。该属性⽤于指定⼀段⽂本的字体颜⾊。如果不指定该属性,则默认为⿊⾊。
NSForegroundColorAttributeName 设置的颜⾊与 UILabel 的 textColor 属性设置的颜⾊在地位上是相等的,与NSBackgroundColorAttributeName 地位上也相等,谁最后赋值,最终显⽰的就是谁的颜⾊,但是textColor属性可以与 NSBackgroundColorAttributeName 属性可叠加。
4:N SBa c k gr o undCo lo rAttributeN a me 字体所在区域背景颜⾊
吉他弹唱童年该属性所对应的值是⼀个 UIColor 对象。该属性⽤于指定⼀段⽂本的背景颜⾊。如果不指定该属性, 默认值为nil,透明⾊
5:N SLiga tur eAttr ibuteN a m e 连体属性
该属性所对应的值是⼀个 NSNumber 对象(整数)。连体字符是指某些连在⼀起的字符,它们采⽤单个的图元符号。0 表⽰没有连体字符。1 表⽰使⽤默认的连体字符。2表⽰使⽤所有连体符号。默认值为 1(注意,iOS 不⽀持值为2)。⼀般中⽂⽤不到,在英⽂中可能出现相邻字母连笔的情况
6:N SKer nAttr ibuteN a m e 字符间距
me 字符间距
取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄,值为浮点数,字距属性,默认值为0
7:N SStr ik ethr o ughStyleAttributeN a m e 删除线
设置删除线,取值为 NSNumber 对象(整数),枚举默认值是NSUnderlineStyleNone。
NSUnderlineStyleNone 不设置删除线
NSUnderlineStyleSingle 设置删除线为细单实线
蓬莱阁导游词NSUnderlineStyleThick 设置删除线为粗单实线
NSUnderlineStyleDouble 设置删除线为细双实线
8:N SStr ik ethr o ughCo lo rAttributeN a m e 删除线颜⾊
me 删除线颜⾊
取值为 UIColor 对象,默认值为⿊⾊,
9:N SU nder lineStyleAttributeN a m e 下划线
lineStyleAttr ibuteN me 下划线
取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似,该值指定是否在⽂字上加上下划线,下划线除了线条位置和删除线不同外,其他的都可以完全参照删除线设置
人与动物410:N SU nder lineCo lo r AttributeN a me 下划线颜⾊
rAttributeN m e 下划线颜⾊
设置下划线颜⾊,取值为 UIColor 对象,默认值为⿊⾊
朵颐是什么意思
11:N SStr o k eWidthAttributeN a me 笔画宽度
值为浮点数NSNumber,该值改变笔画宽度(相对于字体 size 的百分⽐)设置笔画的粗细,负值填充效果,正值中空效果,正数只改变描边宽度,负数同时改变⽂字的描边和填充宽度,默认为 0,即不改变。
12:N SStr o k eCo lo r AttributeN a m e 填充部分颜⾊
me 填充部分颜⾊
填充部分颜⾊,不是字体颜⾊,取值为 UIColor 对象,
13:N SSha do w Attr ibuteN a me 阴影属性
取值为 NSShadow 对象,默认为 nil。
NSShadow *shadow=[[NSShadow alloc] init];
shadow.shadowBlurRadius=5;//模糊度
shadow.shadowColor=[UIColor yellowColor];
shadow.shadowOfft=CGSizeMake(1, 3);
14:N SObliquenessAttributeN a m e 字形倾斜度
me 字形倾斜度
取值为 NSNumber (float),正值右倾,负值左倾,默认值为0,表⽰没有倾斜,
15:N SExpa nsio nAttributeN a me 横向拉伸属性,
m e 横向拉伸属性,
取值为 NSNumber (float),正值横向拉伸⽂本,负值横向压缩⽂本
16:N SVer tic a lGlyphFo rm AttributeN a m e ⽂字排版⽅向
Attr ibuteN me ⽂字排版⽅向
取值为 NSNumber 对象(整数),0 表⽰横排⽂本,1 表⽰竖排⽂本,在iOS中, 总是以横向排版,0 以外的值都未定义。
17:N STextEffec tAttributeN a me ⽂本特殊效果
这个属性的值是⼀个NSString对象。使⽤此属性指定的⽂字效果,如NSTextEffectLetterpressStyle。此属性的默认值为nil,表⽰没有⽂本效应。
18:N SBa lineOfftAttributeN a m e 基线偏移值
取值为 NSNumber (float),表⽰的字符从基线偏移的NSNumber对象,默认值是0,正值上偏,负值下偏。
nAttributeN
19:N SWr itingDir ec tio nAttr ibuteN a me ⽂字书写⽅向
取值为包含NSNumber对象的数组. 从左向右书写或者从右向左书写。
The values of the NSNumber objects should be 0, 1, 2, or 3, for LRE, RLE, LRO, or RLO respectively, and combinations of NSWritingDirectionLeftToRight and NSWritingDirectionRightToLeft with
NSTextWritingDirectionEmbedding or NSTextWritingDirectionOverride, as shown in Values of
NSWritingDirectionAttributeName and equivalent markup.德国双元制
[attributedString addAttribute:NSWritingDirectionAttributeName value:@[@3] range:NSMakeRange(40, 4)]; 20:N SLink Attr ibuteN a me 链接属性
m e 链接属性
唐太宗贞观之治点击后调⽤浏览器打开指定URL地址,此属性的值是NSURL对象(⾸选)或⼀个NSString对象,此属性的默认值为nil,表⽰没有链接,UILabel⽆法使⽤该属性, 可以使⽤UITextView 控件。
21:N SAtta c hm entAttributeN a m e ⽂本附件
取值为NSTextAttachment对象,常⽤于⽂字图⽚混排,此属性的默认值为nil,表⽰⽆附件。
使⽤:
//创建NSTextAttachment的对象,⽤来装载图⽚
NSTextAttachment *attch = [[NSTextAttachment alloc] init];
//将NSTextAttachment对象的image属性设置为想要使⽤的图⽚
attch.image = [UIImage imageNamed:@"lock_wallpaper.jpeg"];
//设置NSTextAttachment对象bounds⼤⼩,也就是要显⽰的图⽚的⼤⼩
attch.bounds = CGRectMake(0, 0, 50, 50);
// 创建带有图⽚的富⽂本
NSAttributedString *string = [NSAttributedString attributedStringWithAttachment:attch];
//插⼊⽂本指定位置
[attributedString inrtAttributedString:string atIndex:7];
//插⼊⽂本末尾
[attributedString appendAttributedString:string];
⼆:效果展⽰
了解完上⾯的属性介绍,看⼀下实际的效果
三:实现代码: