NSAttributeString使用详解
富文本,相当于是给string添加多条属性,如倾斜、字体颜色、间距等属性。
属性列举:
名称 | 描述 | 默认值 |
---|---|---|
NSFontAttributeName | 字体 UIFont | Helvetica(Neue) 12 |
NSForegroundColorAttributeName | 文字颜色 UIColor | blackColor |
NSBackgroundColorAttributeName | 背景颜色 UIColor | nil: no background |
NSParagraphStyleAttributeName | 绘图的风格 NSParagraphStyle | defaultParagraphStyle |
NSLigatureAttributeName | 字符连体 NSNumber containing integer | default 1: default ligatures, 0: no ligatures |
NSKernAttributeName | 字符间隔 NSNumber containing floating point value, in points | amount to modify default kerning. 0 means kerning is disabled. |
NSTrackingAttributeName | iOS14新增 NSNumber containing floating point value, in points | amount to modify default tracking. 0 means tracking is disabled. |
NSStrikethroughStyleAttributeName | 删除线 NSNumber containing integer | default 0: no strikethrough |
NSUnderlineStyleAttributeName | 下划线 NSNumber containing integer | default 0: no underline |
NSStrokeColorAttributeName | 描绘边颜色 UIColor | default nil: same as foreground color |
NSStrokeWidthAttributeName | 描边宽度 NSNumber containing floating point value, in percent of font point size | default 0: no stroke; positive for stroke alone, negative for stroke and fill (a typical value for outlined text would be 3.0) |
NSShadowAttributeName | 阴影 NSShadow | default nil: no shadow |
NSTextEffectAttributeName | 文字效果 NSString | default nil: no text effect |
NSAttachmentAttributeName | 附属 NSTextAttachment | default nil |
NSLinkAttributeName | 链接 NSURL | NSURL (preferred) or NSString |
NSBaselineOffsetAttributeName | 基础偏移量 NSNumber containing floating point value, in points | offset from baseline, default 0 |
NSUnderlineColorAttributeName | 下划线颜色 UIColor | default nil: same as foreground color |
NSStrikethroughColorAttributeName | 删除线颜色 UIColor | default nil: same as foreground color |
NSObliquenessAttributeName | 字体倾斜 NSNumber containing floating point value | skew to be applied to glyphs, default 0: no skew |
NSExpansionAttributeName | 字体扁平化 NSNumber containing floating point value | log of expansion factor to be applied to glyphs, default 0: no expansion |
NSWritingDirectionAttributeName | SArray of NSNumbers representing the nested levels of writing direction overrides as defined by Unicode LRE, RLE, LRO, and RLO characters. The control characters can be obtained by masking NSWritingDirection and NSWritingDirectionFormatType values | LRE:NSWritingDirectionLeftToRight、NSWritingDirectionEmbedding, RLE:NSWritingDirectionRightToLeft 、 NSWritingDirectionEmbedding, LRO: NSWritingDirectionLeftToRight、NSWritingDirectionOverride, RLO: NSWritingDirectionRightToLeft、NSWritingDirectionOverride, |
NSVerticalGlyphFormAttributeName | 垂直或者水平 An NSNumber containing an integer value | 0 means horizontal text. 1 indicates vertical text. If not specified, it could follow higher-level vertical orientation settings. Currently on iOS, it’s always horizontal. The behavior for any other value is undefined. |
使用方式
NSString *priceStr = [NSString stringWithFormat:@"¥%@元", _valueLabel.text];
NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:priceStr attributes:@{
NSFontAttributeName : [UIFont systemFontOfSize:15.0],
NSForegroundColorAttributeName : [UIColor blueColor]
}];
[attributeStr addAttributes:@{NSFontAttributeName : KFontSize(12.0f)} range:NSMakeRange(0, 1)];
[_valueLabel setAttributedText:attributeStr];
注意点:
1、NSAttributeString 在使用isEqual:方法进行对比时,对比的内容包括两方面,一是对字符串的逐个字符进行比较,二是对对应字符串的属性进行比较。
2、NSShadowAttributeName 设置阴影,单独设置不生效,必须和其他属性搭配才生效。搭配属性有:NSVerticalGlyphFormAttributeName,NSObliquenessAttributeName,NSExpansionAttributeName
干货来了
按照官方的NSAttributeString写法写起来很复杂,尤其是多种样式的字符串还需要计算字符串range和lenth,计算错误结果就是crash。因此推荐一个三方,以类似html的写法来设置NSAttributeString。
使用举例:
NSDictionary* style1 = @{@"bodys":[UIFont fontWithName:@"HelveticaNeue" size:20.0],
@"bold":[UIColor colorWithRed:75 / 255.0 green:212 / 255.0 blue:2 / 255.0 alpha:1],
@"red": [UIColor colorWithRed:30 / 255.0 green:30 / 255.0 blue:30 / 255.0 alpha:1],
@"black": [UIColor colorWithRed:120 / 255.0 green:120 / 255.0 blue:120 / 255.0 alpha:1]};
NSString *str = [NSString stringWithFormat:@"<black>你的手机号:</black><bodys>%@</bodys>", phoneNumber];
self.phoneNumberLabel.attributedText = [str attributedStringWithStyleBook:style1];
可多个标签嵌套使用,实现样式的灵活设置。