iOS 中的 富文本文字
转载:http://blog.csdn.net/u010330109/article/details/51882122
iOS富文本字符串AttributedString详解: http://www.jianshu.com/p/9ffcdc0003e0
iOS 富文本可点击: http://www.jianshu.com/p/e5fcf8f74997
首先先了解一下NSMutableAttributedString:
初始化方法:
-(instancetype)initWithString:(NSString*)str;-(instancetype)initWithString:(NSString*)str attributes:(nullableNSDictionary *)attrs;
包含的几个基本方法:
- (void)addAttribute:(NSString*)name value:(id)value range:(NSRange)range;//为某一范围内文字添加某个属性
- (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;//为某一范围内文字设置多个属性
- (void)removeAttribute:(NSString*)name range:(NSRange)range;//移除某范围内的某个属性
初始化的方法和NSMutableString一样。
NSFontAttributeName(字体)
该属性所对应的值是一个 UIFont 对象。该属性用于改变一段文本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。
NSParagraphStyleAttributeName(段落)
该属性所对应的值是一个 NSParagraphStyle 对象。该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle 方法返回的默认段落属性。
NSMutableParagraphStyle*paragraph = [[NSMutableParagraphStylealloc] init];paragraph.alignment =NSTextAlignmentCenter;
NSForegroundColorAttributeName(字体颜色)
该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的字体颜色。如果不指定该属性,则默认为黑色。
// NSForegroundColorAttributeName
NSDictionary*attrDict1 = @{NSForegroundColorAttributeName: [UIColorredColor] };
NSDictionary*attrDict2 = @{NSForegroundColorAttributeName: [UIColorblueColor] };
NSDictionary*attrDict3 = @{NSForegroundColorAttributeName: [UIColororangeColor] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
注意:
NSForegroundColorAttributeName 设置的颜色与 UILabel 的 textColor 属性设置的颜色在地位上是相等的,与 NSBackgroundColorAttributeName 地位上也相等,谁最后赋值,最终显示的就是谁的颜色,但是textColor属性可以与 NSBackgroundColorAttributeName 属性可叠加。
NSBackgroundColorAttributeName(字体背景色)
该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的背景颜色。如果不指定该属性,则默认无背景色。
NSLigatureAttributeName(连字符)
该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,它们采用单个的图元符号。0 表示没有连体字符。1 表示使用默认的连体字符。2表示使用所有连体符号。默认值为 1(注意,iOS 不支持值为 2)。
NSString *ligatureStr = @"flush";
NSDictionary *attrDict1 = @{NSLigatureAttributeName:[NSNumbernumberWithInt:0],NSFontAttributeName:[UIFontfontWithName:@"futura"size:30] };
_label01.attributedText = [[NSAttributedString alloc]initWithString:ligatureStrattributes:attrDict1];
NSDictionary *attrDict2 = @{NSLigatureAttributeName:@(1),NSFontAttributeName:[UIFontfontWithName:@"futura"size:30] };
_label02.attributedText = [[NSAttributedString alloc]initWithString:ligatureStrattributes:attrDict2];
由于要展示连体字符,所以将前面使用的带有中文的字符串换成 flush
NSLigatureAttributeName的取值为NSNumber对象,所以不能直接将一个整数值赋给它,创建 NSNumber 对象的方法有很多,或者可以简写成 @(int)
注意观察字母f和l之间的变化。
感觉连写就是一个艺术字功能,当字符f和l组合使用组合符号(所谓的字形(glyph))绘制时,看起来确实更加美观。但是并非所有的字符之间都有组合符号,事实上,只有某些字体中得某些字符的组合(如字符f和l,字符f和i等)才具有美观的组合符号。
NSKernAttributeName(字间距)
NSKernAttributeName 设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄
NSDictionary*attrDict1 = @{NSKernAttributeName: @(-3),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSKernAttributeName: @(0),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSKernAttributeName: @(10),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSStrikethroughStyleAttributeName(删除线)
NSStrikethroughStyleAttributeName 设置删除线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值:
NSUnderlineStyleNone 不设置删除线
NSUnderlineStyleSingle 设置删除线为细单实线
NSUnderlineStyleThick 设置删除线为粗单实线
NSUnderlineStyleDouble 设置删除线为细双实线
默认值是NSUnderlineStyleNone。
NSDictionary*attrDict1 = @{NSStrikethroughStyleAttributeName: @(NSUnderlineStyleSingle),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSStrikethroughStyleAttributeName: @(NSUnderlineStyleThick),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSStrikethroughStyleAttributeName: @(NSUnderlineStyleDouble),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
注意:
虽然使用了枚举常量,但是枚举常量的本质仍为整数,所以同样必须先转化为 NSNumber 才能使用
删除线和下划线使用相同的枚举常量作为其属性值
目前iOS中只有上面列出的4中效果,虽然我们能够在头文件中发现其他更多的取值,但是使用后没有任何效果
可以看出,中文和英文删除线的位置有所不同
另外,删除线属性取值除了上面的4种外,其实还可以取其他整数值,有兴趣的可以自行试验,取值为 0 - 7时,效果为单实线,随着值得增加,单实线逐渐变粗,取值为 9 - 15时,效果为双实线,取值越大,双实线越粗。
NSDictionary*attrDict1 = @{NSStrikethroughStyleAttributeName: @(1),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSStrikethroughStyleAttributeName: @(3),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSStrikethroughStyleAttributeName: @(7),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSStrikethroughColorAttributeName
NSStrikethroughColorAttributeName 设置删除线颜色,取值为 UIColor 对象,默认值为黑色
NSDictionary*attrDict1 = @{NSStrikethroughColorAttributeName: [UIColorblueColor],NSStrikethroughStyleAttributeName: @(1),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSStrikethroughColorAttributeName: [UIColororangeColor],NSStrikethroughStyleAttributeName: @(3),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSStrikethroughColorAttributeName: [UIColorgreenColor],NSStrikethroughStyleAttributeName: @(7),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSUnderlineStyleAttributeName(下划线)
该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上下划线,该值参考“Underline Style Attributes”。默认值是NSUnderlineStyleNone。
下划线除了线条位置和删除线不同外,其他的都可以完全参照删除线设置。
NSUnderlineColorAttributeName
NSUnderlineColorAttributeName 设置下划线颜色,取值为 UIColor 对象,默认值为黑色
NSDictionary*attrDict1 = @{NSUnderlineColorAttributeName: [UIColorblueColor],NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSUnderlineColorAttributeName: [UIColororangeColor],NSUnderlineStyleAttributeName: @(NSUnderlineStyleThick),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSUnderlineColorAttributeName: [UIColorgreenColor],NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),NSFontAttributeName: [UIFontsystemFontOfSize:20] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSStrokeColorAttributeName(边线颜色) 和 NSStrokeWidthAttributeName(边线宽度)
设置文字描边颜色,需要和NSStrokeWidthAttributeName设置描边宽度,这样就能使文字空心.
NSStrokeWidthAttributeName 这个属性所对应的值是一个 NSNumber 对象(小数)。该值改变笔画宽度(相对于字体 size 的百分比),负值填充效果,正值中空效果,默认为 0,即不改变。正数只改变描边宽度。负数同时改变文字的描边和填充宽度。例如,对于常见的空心字,这个值通常为 3.0。
同时设置了空心的两个属性,并且 NSStrokeWidthAttributeName 属性设置为整数,文字前景色就无效果了
NSStrokeColorAttributeName 填充部分颜色,不是字体颜色,取值为 UIColor 对象
NSDictionary*attrDict1 = @{NSStrokeWidthAttributeName: @(-3),NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSStrokeWidthAttributeName: @(0),NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSStrokeWidthAttributeName: @(3),NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSDictionary*attrDict1 = @{NSStrokeWidthAttributeName: @(-3),NSStrokeColorAttributeName: [UIColororangeColor],NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label01.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict1];
NSDictionary*attrDict2 = @{NSStrokeWidthAttributeName: @(0),NSStrokeColorAttributeName: [UIColorblueColor],NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label02.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict2];
NSDictionary*attrDict3 = @{NSStrokeWidthAttributeName: @(3),NSStrokeColorAttributeName: [UIColorgreenColor],NSFontAttributeName: [UIFontsystemFontOfSize:30] };
_label03.attributedText = [[NSAttributedStringalloc] initWithString: originStr attributes: attrDict3];
NSShadowAttributeName(阴影)
该属性所对应的值是一个 NSShadow 对象。默认为 nil。单独设置不好使,和这三个任一个都好使,NSVerticalGlyphFormAttributeName,NSObliquenessAttributeName,NSExpansionAttributeName
NSVerticalGlyphFormAttributeName(横竖排版)
该属性所对应的值是一个 NSNumber 对象(整数)。0 表示横排文本。1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义。
NSObliquenessAttributeName(字体倾斜)
NSExpansionAttributeName (文本扁平化)
在iOS开发中,常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求。之前在网上找了一些资料,有的是重绘UILabel的textLayer,有的是用HTML5实现的,都比较麻烦,而且很多UILabel的属性也不起作用了,效果都不理想。后来了解到NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现。
1.实例化方法和使用方法
实例化方法:
使用字符串初始化
- (id)initWithString:(NSString*)str;
例:
NSMutableAttributedString*AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"];
- (id)initWithString:(NSString*)str attributes:(NSDictionary*)attrs;
字典中存放一些属性名和属性值,如:
NSDictionary*attributeDict = [NSDictionarydictionaryWithObjectsAndKeys:
[UIFontsystemFontOfSize:15.0],NSFontAttributeName,
[UIColorredColor],NSForegroundColorAttributeName,
NSUnderlineStyleAttributeName,NSUnderlineStyleSingle,nil];
NSMutableAttributedString*AttributedStr = [[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"attributes:attributeDict];
- (id)initWithAttributedString:(NSAttributedString*)attester;
使用NSAttributedString初始化,跟NSMutableString,NSString类似
使用方法:
为某一范围内文字设置多个属性
- (void)setAttributes:(NSDictionary*)attrs range:(NSRange)range;
为某一范围内文字添加某个属性
- (void)addAttribute:(NSString*)name value:(id)value range:(NSRange)range;
为某一范围内文字添加多个属性
- (void)addAttributes:(NSDictionary*)attrs range:(NSRange)range;
移除某范围内的某个属性
- (void)removeAttribute:(NSString*)name range:(NSRange)range;
2.常见的属性及说明
NSFontAttributeName字体
NSParagraphStyleAttributeName段落格式
NSForegroundColorAttributeName字体颜色
NSBackgroundColorAttributeName背景颜色
NSStrikethroughStyleAttributeName删除线格式
NSUnderlineStyleAttributeName下划线格式
NSStrokeColorAttributeName删除线颜色
NSStrokeWidthAttributeName删除线宽度
NSShadowAttributeName阴影
更多方法和属性说明详见苹果官方说明文档:
3.使用实例
UILabel*testLabel=[[UILabelalloc]initWithFrame:CGRectMake(0,100,320,30)];
testLabel.backgroundColor=[UIColorlightGrayColor];
testLabel.textAlignment=NSTextAlignmentCenter;
NSMutableAttributedString*AttributedStr=[[NSMutableAttributedStringalloc]initWithString:@"今天天气不错呀"];
[AttributedStraddAttribute:NSFontAttributeName
value:[UIFontsystemFontOfSize:16.0]
range:NSMakeRange(2,2)];
[AttributedStraddAttribute:NSForegroundColorAttributeName
value:[UIColorredColor]
range:NSMakeRange(2,2)];
testLabel.attributedText=AttributedStr;
[self.viewaddSubview:testLabel];
运行效果:
另外,其他可以设置text的控件(如UIButton,UITextField)也都有该属性,该文章不够详细,只是简单介绍,其他效果的实现参考API中更多的属性及使用方法。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
项目上要加载html格式的文本,学习一下富文本相关内容。
因为解析的数据里面有html标签,就使用下面的代码把字符串转换成data,初始化时再用HTML类型,转换为富文本。
NSMutableAttributedString* attrStr = [[NSMutableAttributedStringalloc]initWithData:[strdataUsingEncoding:NSUnicodeStringEncoding]options:@{NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType}documentAttributes:nilerror:nil];
参数options里面的字典有三对key value
文档类型NSDocumentTypeDocumentAttribute
NSPlainTextDocumentType// 普通文本NSRTFTextDocumentType// 富文本NSRTFDTextDocumentType// 带附件的富文本NSHTMLTextDocumentType// 这个可以加载HTML格式的文本
编码格式NSCharacterEncodingDocumentAttribute
[NSNumber numberWithInt:NSUTF8StringEncoding]; // 不再一一列举
默认NSDefaultAttributesDocumentAttribute
这个不知道对应的value是什么
2.富文本总结
属性Name干啥的类型
NSFontAttributeName字号UIFont 默认12
NSParagraphStyleAttributeName段落样式NSParagraphStyle
NSForegroundColorAttributeName前景色UIColor
NSBackgroundColorAttributeName背景色UIColor
NSObliquenessAttributeName字体倾斜NSNumber
NSExpansionAttributeName字体加粗NSNumber 比例 0就是不变 1增加一倍
NSKernAttributeName字间距CGFloat
NSUnderlineStyleAttributeName下划线1或0
NSUnderlineColorAttributeName下划线颜色UIColor
NSStrikethroughStyleAttributeName删除线1或0
NSStrikethroughColorAttributeName删除线颜色UIColor
NSStrokeColorAttributeNamesame as ForegroundColorUIColor
NSStrokeWidthAttributeName字体描边CGFloat
NSLigatureAttributeName连笔字 没看出效果1或0
NSShadowAttributeName阴影NSShawdow
NSTextEffectAttributeName设置文本特殊效果,目前只有图版印刷效果可用NSString
NSAttachmentAttributeName设置文本附件,常用插入图片NSTextAttachment
NSLinkAttributeName链接NSURL (preferred) or NSString
NSBaselineOffsetAttributeName基准线偏移NSNumber
NSWritingDirectionAttributeName文字方向 分别代表不同的文字出现方向等等,我想你一定用不到它 - -@[@(1),@(2)]
NSVerticalGlyphFormAttributeName水平或者竖直文本 在iOS没卵用,不支持竖版1竖直 0水平
解释一下其中的三个类型
段落样式主要改行距、段距、首行缩进、最大最小行高、多倍行距等十几个属性,把这些总结了你就比我更全..
NSMutableParagraphStyle *muParagraph = [[NSMutableParagraphStyle alloc]init]; muParagraph.lineSpacing =10;// 行距
muParagraph.paragraphSpacing =20;// 段距
muParagraph.firstLineHeadIndent =30;// 首行缩进
就三属性,不用解释了
NSShadow *shadow= [[NSShadow alloc]init];shadow.shadowOffset = CGSizeMake(2,2);
shadow.shadowColor = [UIColor orangeColor];shadow.shadowBlurRadius =1;
这个我的也没显示出来,想钻研的看这里http://www.jianshu.com/p/5babe8b7983e
NSTextAttachment *attachment=[[NSTextAttachment alloc] initWithData:nilofType:nil];UIImage*img=[UIImageimageNamed:@"test.png"];
attachment.image=img;
attachment.bounds=CGRectMake(0,0,20,20);
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
[self.view addSubview:self.attTV];
//NSFontAttributeName 字号 UIFont 默认12
//NSParagraphStyleAttributeName 段落样式 NSParagraphStyle
//NSForegroundColorAttributeName 前景色 UIColor
//NSBackgroundColorAttributeName 背景色 UIColor//NSObliquenessAttributeName 字体倾斜 NSNumber//NSExpansionAttributeName 字体加粗 NSNumber 比例 0就是不变 1增加一倍//NSKernAttributeName 字间距 CGFloat
//NSUnderlineStyleAttributeName 下划线 1或0
//NSUnderlineColorAttributeName 下划线颜色
//NSStrikethroughStyleAttributeName 删除线 1或0
//NSStrikethroughColorAttributeName 某种颜色
//NSStrokeColorAttributeName same as ForegroundColor
//NSStrokeWidthAttributeName CGFloat
//NSLigatureAttributeName 连笔字 1或0 没看出效果
//NSShadowAttributeName 阴影 NSShawdow
//NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用:
//NSAttachmentAttributeName NSTextAttachment 设置文本附件,常用插入图片
//NSLinkAttributeName 链接 NSURL (preferred) or NSString
//NSBaselineOffsetAttributeName 基准线偏移 NSNumber
//NSWritingDirectionAttributeName 文字方向 @[@(1),@(2)] 分别代表不同的文字出现方向等等,我想你一定用不到它 - -
//NSVerticalGlyphFormAttributeName 水平或者竖直文本 1竖直 0水平 在iOS没卵用,不支持竖版NSParagraphStyle *paragraph = [[NSParagraphStyle alloc]init]; NSMutableParagraphStyle *muParagraph = [[NSMutableParagraphStyle alloc]init];
muParagraph.lineSpacing =10;// 行距
muParagraph.paragraphSpacing =20;// 段距
muParagraph.firstLineHeadIndent =30;// 首行缩进
NSMutableAttributedString * attrStr = [[NSMutableAttributedString alloc] initWithData:[@"asdasdflhjlfsaiollzislooa"dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nilerror:nil];
NSRangerange= NSMakeRange(0, attrStr.length);
// 设置字体大小
[attrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:30]range:range];
//字间距
[attrStr addAttribute:NSKernAttributeName value:@(2)range:range];
// 字体倾斜
[attrStr addAttribute:NSObliquenessAttributeName value:@(1)range:range];
// 字体加粗
[attrStr addAttribute:NSExpansionAttributeName value:@(0.5)range:range];
// 下划线
[attrStr addAttribute:NSUnderlineStyleAttributeName value:@(1)range:range]; [attrStr addAttribute:NSUnderlineColorAttributeName value:[UIColor blueColor]range:range];
// 删除线
[attrStr addAttribute:NSStrikethroughStyleAttributeName value:@(1)range:range]; [attrStr addAttribute:NSStrikethroughColorAttributeName value:[UIColor greenColor]range:range];
// 连体字
[attrStr addAttribute:NSLigatureAttributeName value:@(1)range:range];
// 设置颜色
[attrStr addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:0.942green:0.611blue:0.771alpha:1.000]range:range];
// 背景色
[attrStr addAttribute:NSBackgroundColorAttributeName value:[UIColor colorWithRed:0.475green:0.482blue:0.942alpha:1.000]range:range];
// stroke
[attrStr addAttribute:NSStrokeColorAttributeName value:[UIColor blueColor]range:range]; [attrStr addAttribute:NSStrokeWidthAttributeName value:@(2)range:range];
// 设置段落样式
[attrStr addAttribute:NSParagraphStyleAttributeName value:muParagraphrange:range];
// 文本方向
[attrStr addAttribute:NSVerticalGlyphFormAttributeName value:@(1)range:range];
[attrStr addAttribute:NSWritingDirectionAttributeName value:@[@(2),@(3)]range:range];
// 阴影
NSShadow *shadow = [[NSShadow alloc]init];
shadow.shadowOffset = CGSizeMake(2,2);
shadow.shadowColor = [UIColor orangeColor];
shadow.shadowBlurRadius =1;
[attrStr addAttribute:NSShadowAttributeName value:shadowrange:range];
// 链接
[attrStr addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://www.jianshu.com/p/8f49c9c99b21"]range:range];
// 文字中加图片
NSTextAttachment *attachment=[[NSTextAttachment alloc] initWithData:nilofType:nil];
UIImage *img=[UIImage imageNamed:@"test.png"];
attachment.image=img;
attachment.bounds=CGRectMake(0,0,20,20);
[attrStr addAttribute:NSAttachmentAttributeName value:attachmentrange:range];
// 基准线偏移
[attrStr addAttribute:NSBaselineOffsetAttributeName value:@(50)range:range]; self.attTV.attributedText = attrStr;}
我的效果图很磕馋
同时遇到一个需求,TextView输入的内容的行距字间距进行调整,这样输入一大段字会清楚一点。
网上的方法是在- (void)textViewDidChange:(UITextView *)textView代理方法中根据text生成对应格式的attributedText
- (void)textViewDidChange:(UITextView*)textView{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing=16;
// 字体的行间距NSDictionary*attributes = @{ NSFontAttributeName:[UIFontsystemFontOfSize:17], NSParagraphStyleAttributeName:paragraphStyle, NSKernAttributeName : @(1.4f) };
textView.attributedText= [[NSAttributedString alloc] initWithString:textView.textattributes:attributes];}
但是中文输入法的时候就会懵逼,会同时打出英文
最后没办法,改成可视化的textView,调整行距的属性,字间距就没办法了,谁有好办法可以教教我