NSAttributedString使用方法整理

Posted alexZeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSAttributedString使用方法整理相关的知识,希望对你有一定的参考价值。

NSAttributedString,是带有属性的字符串(富文本),分为NSAttributedString和NSMutableAttributedString. 可以用在 UILabel、UITextView 等处。

属性就是一个以属性名为 key 的字典。常见的属性有:

 1     // NSFontAttributeName                设置字体属性,默认值:字体:Helvetica(Neue) 字号:12
 2     // NSForegroundColorAttributeNam      设置字体颜色,取值为 UIColor对象,默认值为黑色
 3     // NSBackgroundColorAttributeName     设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色
 4     // NSLigatureAttributeName            设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符
 5     // NSKernAttributeName                设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄
 6     // NSStrikethroughStyleAttributeName  设置删除线,取值为 NSNumber 对象(整数)
 7     // NSStrikethroughColorAttributeName  设置删除线颜色,取值为 UIColor 对象,默认值为黑色
 8     // NSUnderlineStyleAttributeName      设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似
 9     // NSUnderlineColorAttributeName      设置下划线颜色,取值为 UIColor 对象,默认值为黑色
10     // NSStrokeWidthAttributeName         设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果
11     // NSStrokeColorAttributeName         填充部分颜色,不是字体颜色,取值为 UIColor 对象
12     // NSShadowAttributeName              设置阴影属性,取值为 NSShadow 对象
13     // NSTextEffectAttributeName          设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用:
14     // NSBaselineOffsetAttributeName      设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏
15     // NSObliquenessAttributeName         设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾
16     // NSExpansionAttributeName           设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本
17     // NSWritingDirectionAttributeName    设置文字书写方向,从左向右书写或者从右向左书写
18     // NSVerticalGlyphFormAttributeName   设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本
19     // NSLinkAttributeName                设置链接属性,点击后调用浏览器打开指定URL地址
20     // NSAttachmentAttributeName          设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排
21     // NSParagraphStyleAttributeName      设置文本段落排版格式,取值为 NSParagraphStyle 对象

使用方法:

1.初始化一个NSMutableAttributedString,给它添加属性,再把它赋给控件的AttributedText,适用于文本较少又需要精细控制的情况。

 1     NSString *originStr = @"测试富文本属性";
 2     //创建 NSMutableAttributedString
 3     NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc] initWithString: originStr];
 4     
 5     //添加属性
 6     //设置全部字体为14号粗体
 7     [attributedStr addAttribute: NSFontAttributeName value: [UIFont  boldSystemFontOfSize:14]
 8                             range: NSMakeRange(0, originStr.length)];
 9     //设置前4个字体为蓝色
10     [attributedStr addAttribute: NSForegroundColorAttributeName value: [UIColor blueColor] range: NSMakeRange(0, 4)];
11     
12     //赋值给显示控件label的 attributedText
13     _label.attributedText = attributedStr;

2.创建一个属性字典,初始化各项属性。然后和需要控制的文本一起创建并赋值给控件的AttributedText,该方法适合于需要控制的文本较多整体控制的情况,通常是从文件中读取的大段文本控制。

1     NSString *originStr = @"测试富文本属性";
2     //创建属性字典
3     NSDictionary *attrDict = @{NSFontAttributeName: [UIFont systemFontOfSize:15],
4                                NSForegroundColorAttributeName: [UIColor blueColor]};
5     //将字符串和属性赋给控件的 AttributedText,也可以指定 range
6     label.attributedText = [[NSAttributedString alloc] initWithString:[originStr substringWithRange:NSMakeRange(0, 6)] attributes:attrDict];

使用详解:

1.NSForegroundColorAttributeName设置的颜色与UILabel的textColor属性设置的颜色在地位上是相等的,谁最后赋值,最终显示的就是谁的颜色。但是textColor属性可以与 NSBackgroundColorAttributeName 属性叠加。

2. NSStrikethroughStyleAttributeName用来设置NSUnderlineStyle中的值

1 // NSUnderlineStyleNone   不设置删除线
2 // NSUnderlineStyleSingle 设置删除线为细单实线
3 // NSUnderlineStyleThick  设置删除线为粗单实线
4 // NSUnderlineStyleDouble 设置删除线为细双实线
这些枚举常量是包含一个整数的 NSNumber,所以同样必须先转化为 NSNumber 才能使用删除线和下划线使用相同的枚举常量作为其属性值。
1 NSDictionary *attrDict = @{ NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),
2                              NSFontAttributeName: [UIFont systemFontOfSize:20] };
3 _label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];
中文和英文删除线的位置有所不同。
另外,删除线属性取值除了上面的4种外,其实还可以取其他整数值:取值为 0 - 7时,效果为单实线,随着值得增加,单实线逐渐变粗,取值为 9 - 15时,效果为双实线,取值越大,双实线越粗。
1 NSDictionary *attrDict = @{ NSStrikethroughStyleAttributeName: @(1),
2                               NSFontAttributeName: [UIFont systemFontOfSize:20] };
3 _label.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict];

3.下划线和删除线类似,可以参考设置

 1         NSUnderlineStyleNone //没有下划线
 2         NSUnderlineStyleSingle //单下划线
 3         NSUnderlineStyleThick //粗下划线
 4         NSUnderlineStyleDouble //双下划线
 5         NSUnderlinePatternSolid //实心下划线
 6         NSUnderlinePatternDot //点下划线
 7         NSUnderlinePatternDash //破折号下划线
 8         NSUnderlinePatternDashDot //破折号和点下划线
 9         NSUnderlinePatternDashDotDot //一个破折号和两个点的下划线
10         NSUnderlineByWord //下划线紧贴文字

4.NSParagraphStyleAttributeName 设置段落样式,包括:

 1 //alignment 对齐;
 2 //firstLineHeadIndent:首行缩进
 3 //tailIndent:段落尾部缩进
 4 //headIndent:段落前部缩进(左缩进?)
 5 //maximumLineHeight:最大行高
 6 //minimumLineHeight:最小行高
 7 //lineSpacing:行间距
 8 //paragraphSpacing:段落间距
 9 //lineBreakMode:断行模式
10 //defaultWritingDirectionForLanguage:默认书写方向(可以指定某种语言)
11 //baseWritingDirection(基础的书写方向)

lineBreakMode有6种:

1 //NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。
2 //NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。
3 //NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。
4 //NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。
5 //NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。
6 //NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。

 

 

以上是关于NSAttributedString使用方法整理的主要内容,如果未能解决你的问题,请参考以下文章

装机知识主板知识整理

使用 NSAttributedString 设置字体

你如何使用 NSAttributedString?

你如何使用NSAttributedString?

使用 UITextRange 从 UITextView 获取 NSAttributedString

用另一个 NSAttributedString 替换 NSAttributedString 的子字符串