美文网首页
iOS 中的 富文本文字

iOS 中的 富文本文字

作者: F麦子 | 来源:发表于2017-04-04 16:47 被阅读780次

    转载: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,调整行距的属性,字间距就没办法了,谁有好办法可以教教我

    相关文章

      网友评论

          本文标题:iOS 中的 富文本文字

          本文链接:https://www.haomeiwen.com/subject/tpqzottx.html