AttributedString可以分为NSAttributedString
和NSMutableAttributedString
两种。在使用中通过将AttributedString赋值给控件的 attributedText 属性来添加文字样式。有属性的控件有UILabel
、UITextField
和UITextView
。
使用方式一
初始化一个NSMutableAttributedString
,然后向里面添加文字样式,将其赋给控件的attributedText属性。(这种方式只是简单的用几个属性表示了用法,在下面的一种使用方式中,会详细总结所有属性)
NSString *str = @"人生若只如初见,何事悲风秋画扇。 等闲变却故人心,却道故人心易变。 骊山语罢清宵半,泪雨霖铃终不怨。 何如薄幸锦衣郎,比翼连枝当日愿。"; // 创建 NSMutableAttributedString NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:str]; // 设置字体和设置字体的范围 [attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30.0f] range:NSMakeRange(0, 3)]; // 添加文字颜色 [attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(17, 7)]; // 添加文字背景颜色 [attrStr addAttribute:NSBackgroundColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(17, 7)]; // 添加下划线 [attrStr addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:NSMakeRange(8, 7)]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 200, 0)]; label.backgroundColor = [UIColor greenColor]; // 自动换行 label.numberOfLines = 0; // 设置label的富文本 label.attributedText = attrStr; // label高度自适应 [label sizeToFit]; [self.view addSubview:label];
使用方式二
创建属性字典,并将各种属性初始化。赋值,并利用方法appendAttributedString:
添加入NSMutableAttributedString
,将其赋给控件的attributedText属性。
注释感觉写的挺详细,就直接贴代码了:
// 初始化NSMutableAttributedString NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init]; // 设置字体格式和大小 NSString *str0 = @"设置字体格式和大小"; NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14]}; NSAttributedString *attr0 = [[NSAttributedString alloc] initWithString:str0 attributes:dictAttr0]; [attributedString appendAttributedString:attr0]; // 设置字体颜色 NSString *str1 = @" 设置字体颜色 "; NSDictionary *dictAttr1 = @{NSForegroundColorAttributeName:[UIColor purpleColor]}; NSAttributedString *attr1 = [[NSAttributedString alloc] initWithString:str1 attributes:dictAttr1]; [attributedString appendAttributedString:attr1]; // 设置字体背景颜色 NSString *str2 = @"设置字体背景颜色 "; NSDictionary *dictAttr2 = @{NSBackgroundColorAttributeName:[UIColor cyanColor]}; NSAttributedString *attr2 = [[NSAttributedString alloc] initWithString:str2 attributes:dictAttr2]; [attributedString appendAttributedString:attr2]; /* 注:NSLigatureAttributeName设置连体属性,取值为NSNumber对象(整数),1表示使用默认的连体字符,0表示不使用,2表示使用所有连体符号(iOS不支持2)。而且并非所有的字符之间都有组合符合。如 fly ,f和l会连起来。 */ //设置连体属性 NSString *str3 = @"fly"; NSDictionary *dictAttr3 = @{ NSFontAttributeName:[UIFont fontWithName:@"futura" size:14], NSLigatureAttributeName:[NSNumber numberWithInteger:1] }; NSAttributedString *attr3 = [[NSAttributedString alloc]initWithString:str3 attributes:dictAttr3]; [attributedString appendAttributedString:attr3]; /*! 注:NSKernAttributeName用来设置字符之间的间距,取值为NSNumber对象(整数),负值间距变窄,正值间距变宽 */ NSString *str4 = @" 设置字符间距"; NSDictionary *dictAttr4 = @{NSKernAttributeName:@(4)}; NSAttributedString *attr4 = [[NSAttributedString alloc]initWithString:str4 attributes:dictAttr4]; [attributedString appendAttributedString:attr4]; /*! 注:NSStrikethroughStyleAttributeName设置删除线,取值为NSNumber对象,枚举NSUnderlineStyle中的值。NSStrikethroughColorAttributeName设置删除线的颜色。并可以将Style和Pattern相互 取与 获取不同的效果 */ NSString *str51 = @" 设置删除线为细单实线,颜色为红色"; NSDictionary *dictAttr51 = @{ NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle), NSStrikethroughColorAttributeName:[UIColor redColor] }; NSAttributedString *attr51 = [[NSAttributedString alloc]initWithString:str51 attributes:dictAttr51]; [attributedString appendAttributedString:attr51]; NSString *str52 = @" 设置删除线为粗单实线,颜色为红色"; NSDictionary *dictAttr52 = @{ NSStrikethroughStyleAttributeName:@(NSUnderlineStyleThick), NSStrikethroughColorAttributeName:[UIColor redColor] }; NSAttributedString *attr52 = [[NSAttributedString alloc]initWithString:str52 attributes:dictAttr52]; [attributedString appendAttributedString:attr52]; NSString *str53 = @" 设置删除线为细单实线,颜色为红色"; NSDictionary *dictAttr53 = @{ NSStrikethroughStyleAttributeName:@(NSUnderlineStyleDouble), NSStrikethroughColorAttributeName:[UIColor redColor] }; NSAttributedString *attr53 = [[NSAttributedString alloc]initWithString:str53 attributes:dictAttr53]; [attributedString appendAttributedString:attr53]; NSString *str54 = @" 设置删除线为细单虚线,颜色为红色"; NSDictionary *dictAttr54 = @{ NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlinePatternDot), NSStrikethroughColorAttributeName:[UIColor redColor] }; NSAttributedString *attr54 = [[NSAttributedString alloc]initWithString:str54 attributes:dictAttr54]; [attributedString appendAttributedString:attr54]; /*! NSStrokeWidthAttributeName 设置笔画的宽度,取值为NSNumber对象(整数),负值填充效果,正值是中空效果。NSStrokeColorAttributeName 设置填充部分颜色,取值为UIColor对象。 设置中间部分颜色可以使用 NSForegroundColorAttributeName 属性来进行 */ //设置笔画宽度和填充部分颜色 NSString *str6 = @"设置笔画宽度和填充颜色 "; NSDictionary *dictAttr6 = @{ NSStrokeWidthAttributeName:@(2), NSStrokeColorAttributeName:[UIColor blueColor] }; NSAttributedString *attr6 = [[NSAttributedString alloc]initWithString:str6 attributes:dictAttr6]; [attributedString appendAttributedString:attr6]; //设置阴影属性,取值为NSShadow对象 NSString *str7 = @"设置阴影属性 "; NSShadow *shadow = [[NSShadow alloc]init]; shadow.shadowColor = [UIColor redColor]; shadow.shadowBlurRadius = 1.0f; shadow.shadowOffset = CGSizeMake(1, 1); NSDictionary *dictAttr7 = @{NSShadowAttributeName:shadow}; NSAttributedString *attr7 = [[NSAttributedString alloc]initWithString:str7 attributes:dictAttr7]; [attributedString appendAttributedString:attr7]; //设置文本特殊效果,取值为NSString类型,目前只有一个可用效果 NSTextEffectLetterpressStyle(凸版印刷效果) NSString *str8 = @"设置特殊效果 "; NSDictionary *dictAttr8 = @{NSTextEffectAttributeName:NSTextEffectLetterpressStyle}; NSAttributedString *attr8 = [[NSAttributedString alloc]initWithString:str8 attributes:dictAttr8]; [attributedString appendAttributedString:attr8]; //设置文本附件,取值为NSTextAttachment对象,常用于文字的图文混排 NSString *str9 = @"文字的图文混排 "; NSTextAttachment *textAttachment = [[NSTextAttachment alloc]init]; textAttachment.image = [UIImage imageNamed:@"logo"]; textAttachment.bounds = CGRectMake(0, 0, 30, 30); NSDictionary *dictAttr9 = @{NSAttachmentAttributeName:textAttachment}; NSAttributedString *attr9 = [[NSAttributedString alloc]initWithString:str9 attributes:dictAttr9]; [attributedString appendAttributedString:attr9]; /*! 添加下划线 NSUnderlineStyleAttributeName。设置下划线的颜色 NSUnderlineColorAttributeName,对象为 UIColor。使用方式同删除线一样。 */ //添加下划线 NSString *str10 = @"添加下划线 "; NSDictionary *dictAttr10 = @{ NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle), NSUnderlineColorAttributeName:[UIColor redColor] }; NSAttributedString *attr10 = [[NSAttributedString alloc]initWithString:str10 attributes:dictAttr10]; [attributedString appendAttributedString:attr10]; /*! NSBaselineOffsetAttributeName 设置基线偏移值。取值为NSNumber (float),正值上偏,负值下偏 */ //设置基线偏移值 NSBaselineOffsetAttributeName NSString *str11 = @"添加基线偏移值 "; NSDictionary *dictAttr11 = @{NSBaselineOffsetAttributeName:@(-10)}; NSAttributedString *attr11 = [[NSAttributedString alloc]initWithString:str11 attributes:dictAttr11]; [attributedString appendAttributedString:attr11]; /*! NSObliquenessAttributeName 设置字体倾斜度,取值为 NSNumber(float),正值右倾,负值左倾 */ //设置字体倾斜度 NSObliquenessAttributeName NSString *str12 = @"设置字体倾斜度 "; NSDictionary *dictAttr12 = @{NSObliquenessAttributeName:@(0.5)}; NSAttributedString *attr12 = [[NSAttributedString alloc]initWithString:str12 attributes:dictAttr12]; [attributedString appendAttributedString:attr12]; /*! NSExpansionAttributeName 设置字体的横向拉伸,取值为NSNumber (float),正值拉伸 ,负值压缩 */ //设置字体的横向拉伸 NSExpansionAttributeName NSString *str13 = @"设置字体横向拉伸 "; NSDictionary *dictAttr13 = @{NSExpansionAttributeName:@(0.5)}; NSAttributedString *attr13 = [[NSAttributedString alloc]initWithString:str13 attributes:dictAttr13]; [attributedString appendAttributedString:attr13]; /*! NSWritingDirectionAttributeName 设置文字的书写方向,取值为以下组合 @[@(NSWritingDirectionLeftToRight | NSWritingDirectionEmbedding)] @[@(NSWritingDirectionLeftToRight | NSWritingDirectionOverride)] @[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)] @[@(NSWritingDirectionRightToLeft | NSWritingDirectionOverride)] ???NSWritingDirectionEmbedding和NSWritingDirectionOverride有什么不同 */ //设置文字的书写方向 NSWritingDirectionAttributeName NSString *str14 = @"设置文字书写方向 "; NSDictionary *dictAttr14 = @{NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)]}; NSAttributedString *attr14 = [[NSAttributedString alloc]initWithString:str14 attributes:dictAttr14]; [attributedString appendAttributedString:attr14]; /*! NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为NSNumber对象(整数),0表示横排文本,1表示竖排文本 在iOS中只支持0 */ //设置文字排版方向 NSVerticalGlyphFormAttributeName NSString *str15 = @"设置文字排版方向 "; NSDictionary *dictAttr15 = @{NSVerticalGlyphFormAttributeName:@(0)}; NSAttributedString *attr15 = [[NSAttributedString alloc]initWithString:str15 attributes:dictAttr15]; [attributedString appendAttributedString:attr15]; //段落样式 NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc]init]; //行间距 paragraph.lineSpacing = 10; //段落间距 paragraph.paragraphSpacing = 20; //对齐方式 paragraph.alignment = NSTextAlignmentLeft; //指定段落开始的缩进像素 paragraph.firstLineHeadIndent = 30; //调整全部文字的缩进像素 paragraph.headIndent = 10; //添加段落设置 [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, attributedString.length)]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 0, 300, 0)]; label.backgroundColor = [UIColor lightGrayColor]; //自动换行 label.numberOfLines = 0; //设置label的富文本 label.attributedText = attributedString; //label高度自适应 [label sizeToFit]; [self.view addSubview:label];