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;以单词为显示单位显示,后面部分省略不显示。