在iOS开发过程中,经常会用到给字体加下划线,显示不同颜色和大小的字体等需求,经常遇到这种需求都是直接到百度或者谷歌直接把代码粘过来,并没有做系统的整理,今天刚好有时间,把这部分的内容整理一下,便于后续的开发,闲话不说,接下来就跟着我一起来了解一下NSMutableAttributedString吧.
NSAttributedString
NSAttributedString对象管理适用于字符串中单个字符或字符范围的字符串和关联的属性集(例如字体和字距)。NSAttributedString对象的默认字体是Helvetica 12点,可能与平台的默认系统字体不同。因此,您可能希望创建适用于您的应用程序的非默认属性的新字符串。您还可以使用NSParagraphStyle类及其子类NSMutableParagraphStyle来封装NSAttributedString类使用的段落或标尺属性。
实例化方法和使用方法
实例化方法
使用字符串初始化
- (instancetype)initWithString:(NSString *)str;
代码示例
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"测试数据"];
字典中存放一些属性名和属性值
- (instancetype)initWithString:(NSString *)str attributes:(NSDictionary<NSString *,id> *)attrs;
代码示例
NSDictionary *attributedDict = @{
NSFontAttributeName:[UIFont systemFontOfSize:16.0],
NSForegroundColorAttributeName:[UIColor redColor],
NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
};
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"测试数据" attributes:attributedDict];
使用NSAttributedString初始化,与NSMutableString,NSString类似
- (instancetype)initWithAttributedString:(NSAttributedString *)attrStr;
使用方法
为某一范围内的文字设置多个属性的方法
- (void)setAttributes:(NSDictionary<NSString *,id> *)attrs range:(NSRange)range;
//代码示例
NSString *string = @"测试数据";
NSDictionary *attributedDict = @{
NSFontAttributeName:[UIFont systemFontOfSize:16.0],
NSForegroundColorAttributeName:[UIColor redColor],
NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
};
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
[attributedString setAttributes:attributedDict range:NSMakeRange(0, string.length)];
为某一范围内的文字添加某个属性的方法
- (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
//代码示例
NSString *string = @"测试数据";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0, string.length)];
为某一范围内的文字添加多个属性的方法
- (void)addAttributes:(NSDictionary<NSString *,id> *)attrs range:(NSRange)range;
//代码示例
NSString *string = @"测试数据";
NSDictionary *attributedDict = @{
NSFontAttributeName:[UIFont systemFontOfSize:16.0],
NSForegroundColorAttributeName:[UIColor redColor],
NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
};
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
[attributedString addAttributes:attributedDict range:NSMakeRange(0, string.length)];
移除某个范围内的某个属性的方法
- (void)removeAttribute:(NSString *)name range:(NSRange)range;
//代码示例
NSString *string = @"测试数据";
NSDictionary *attributedDict = @{
NSFontAttributeName:[UIFont systemFontOfSize:16.0],
NSForegroundColorAttributeName:[UIColor redColor],
NSUnderlineStyleAttributeName:@(NSUnderlineStyleThick)
};
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
[attributedString addAttributes:attributedDict range:NSMakeRange(0, string.length)];
[attributedString removeAttribute:NSForegroundColorAttributeName range:NSMakeRange(0, string.length)];
属性及说明
key | 说明 |
---|---|
NSFontAttributeName | 字体,value是UIFont对象 |
NSParagraphStyleAttributeName | 绘图的风格(居中,换行模式,间距等诸多风格),value是NSParagraphStyle对象 |
NSForegroundColorAttributeName | 文字颜色,value是UIFont对象 |
NSLigatureAttributeName | 字符连体,value是NSNumber |
NSKernAttributeName | 字符间隔 |
NSStrikethroughStyleAttributeName | 删除线,value是NSNumber |
NSUnderlineStyleAttributeName | 下划线,value是NSNumber |
NSStrokeColorAttributeName | 描绘边颜色,value是UIColor |
NSStrokeWidthAttributeName | 描边宽度,value是NSNumber |
NSShadowAttributeName | 阴影,value是NSShadow对象 |
NSTextEffectAttributeName | 文字效果,value是NSString |
NSAttachmentAttributeName | 附属,value是NSTextAttachment 对象 |
NSLinkAttributeName | 链接,value是NSURL or NSString |
NSBaselineOffsetAttributeName | 基础偏移量,value是NSNumber对象 |
NSStrikethroughColorAttributeName | 删除线颜色,value是UIColor |
NSObliquenessAttributeName | 字体倾斜 |
NSExpansionAttributeName | 字体扁平化 |
NSVerticalGlyphFormAttributeName | 垂直或者水平,value是 NSNumber,0表示水平,1垂直 |
富文本段落排版格式属性说明
属性 | 说明 |
---|---|
lineSpacing | 字体的行间距 |
firstLineHeadIndent | 首行缩进 |
alignment | (两端对齐的)文本对齐方式:(左,中,右,两端对齐,自然) |
lineBreakMode | 结尾部分的内容以……方式省略 ( "...wxyz" ,"abcd..." ,"ab...yz") |
headIndent | 整体缩进(首行除外) |
minimumLineHeight | 最低行高 |
maximumLineHeight | 最大行高 |
paragraphSpacing | 段与段之间的间距 |
paragraphSpacingBefore | 段首行空白空间 |
baseWritingDirection | 书写方向(一共三种) |
hyphenationFactor | 连字属性 在iOS,唯一支持的值分别为0和1 |
网友评论
github地址:https://github.com/hon-key/Nudeln