iOS 中的 富文本文字

2017-04-04  本文已影响780人  F麦子

转载: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阴影

更多方法和属性说明详见苹果官方说明文档:

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableAttributedString_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003689

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格式的文本,学习一下富文本相关内容。

1.加载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);

下面是我的富文本代码,可以copy过去直接试

- (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;}

我的效果图很磕馋

3.TextView行距字间距的问题

同时遇到一个需求,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,调整行距的属性,字间距就没办法了,谁有好办法可以教教我

上一篇下一篇

猜你喜欢

热点阅读