NSAttributedString属性字符串
NSAttributedString属性字符串
业界小白 发表于7个月前
NSAttributedString属性字符串
  • 发表于 7个月前
  • 阅读 23
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

1.属性名

 1> NSFontAttributeName(字体)
 该属性所对应的值是一个 UIFont 对象。该属性用于改变一段文本的字体。如果不指定该属性,则默认为12-point Helvetica(Neue)。

 2> NSParagraphStyleAttributeName(段落)
 该属性所对应的值是一个 NSParagraphStyle 对象。该属性在一段文本上应用多个属性。如果不指定该属性,则默认为 NSParagraphStyle 的defaultParagraphStyle 方法返回的默认段落属性。

示例:

NSString *exchange = [NSString stringWithFormat:@"适用:%@", red.memo];
NSMutableAttributedString *exchangeAttr = [[NSMutableAttributedString alloc] initWithString:exchange];
// 段落样式
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
// 行间距
paragraphStyle.lineSpacing = 4.0;
// 非首行缩进
paragraphStyle.headIndent = 33;
[exchangeAttr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, exchange.length - 1)];
self.explainLB.attributedText = exchangeAttr;

效果:

// 段落样式(NSMutableParagraphStyle)
// alignment               对齐方式,取值枚举常量 NSTextAlignment
// firstLineHeadIndent     首行缩进,取值 float
// headIndent              非首行缩进,取值 float
// tailIndent              整个段落尾部缩进,取值 float
// ineHeightMultiple       可变行高,乘因数,取值 float
// maximumLineHeight       最大行高,取值 float
// minimumLineHeight       最小行高,取值 float
// lineSpacing             行距,取值 float
// paragraphSpacing        段距,取值 float
// paragraphSpacingBefore  段首空间,取值 float
// baseWritingDirection    句子方向,取值枚举常量 NSWritingDirection
// lineBreakMode           断行方式,取值枚举常量 NSLineBreakMode
// hyphenationFactor       连字符属性,取值 0 - 1

二、NSTextAlignment文字对齐方式枚举(IOS6以上有效):
NSTextAlignmentLeft       //居左
NSTextAlignmentRight      //居右
NSTextAlignmentCenter     //居中
NSTextAlignmentNatural    //默认
NSTextAlignmentJustified  //自调整

三、NSWritingDirection文字书写方向(IOS6以上有效):
NSWritingDirectionNatural      //使用Bidi算法规则P2和P3定义方向
NSWritingDirectionLeftToRight  //从左向右
NSWritingDirectionRightToLeft  //从右向左

四、lineBreakMode 断行方式,取值枚举常量 NSLineBreakMode
NSLineBreakByWordWrapping = 0, //自动换行,单词切断
NSLineBreakByCharWrapping,     //自动换行,字母切断
NSLineBreakByClipping,         //非自动换行,不切断
NSLineBreakByTruncatingHead,   //非自动换行,行首切断
NSLineBreakByTruncatingTail,   //非自动换行,行尾切断
NSLineBreakByTruncatingMiddle  //非自动换行,中间切断


 3> NSForegroundColorAttributeName(字体颜色)
 该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的字体颜色。如果不指定该属性,则默认为黑色。

示例:

NSString * string = @"字体颜色为红色";
//富文本
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];
NSDictionary *dict = @{NSForegroundColorAttributeName:[UIColor redColor]};
[attributedString addAttributes:dict range:NSMakeRange(0, string.length)];
lable.attributedText = attributedString;

效果:


 4> NSBackgroundColorAttributeName(字体背景色)
 该属性所对应的值是一个 UIColor 对象。该属性用于指定一段文本的背景颜色。如果不指定该属性,则默认无背景色。
示例:

NSString * string = @"字体背景颜色为红色";
//富文本
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];
NSDictionary *dict = @{NSBackgroundColorAttributeName:[UIColor redColor]};
[attributedString addAttributes:dict range:NSMakeRange(0, string.length)];
lable.attributedText = attributedString;

效果:


 5> NSLigatureAttributeName(连体字符)
 该属性所对应的值是一个 NSNumber 对象(整数)。连体字符是指某些连在一起的字符,
 它们采用单个的图元符号。0 表示没有连体字符。1 表示使用默认的连体字符。2表示使用所有连体符号。默认值为 1(注意,iOS 不支持值为 2)。


 6> NSKernAttributeName(设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄)
 该属性所对应的值是一个 NSNumber 对象(整数)。字母紧排指定了用于调整字距的像素点数。字母紧排的效果依赖于字体。值为 0 表示不使用字母紧排。默认值为0。
示例:

NSString * string = @"设定字符间距";
//富文本
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];
NSDictionary *dict = @{NSKernAttributeName:[NSNumber numberWithInt:20]};
[attributedString addAttributes:dict range:NSMakeRange(0, string.length)];
lable.attributedText = attributedString;

效果:


 7> NSStrikethroughStyleAttributeName(删除线)
 该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上删除线,

NSUnderlineStyle的枚举值(分三段的意思是:可以同时设置其中的某两种或三种都设置)
// NSUnderlineStyleNone 不设置下划线/删除线
// NSUnderlineStyleSingle 设置下划线/删除线为细的单线
// NSUnderlineStyleThick 设置下划线/删除线为粗的单线
// NSUnderlineStyleDouble 设置下划线/删除线为细的双线

// NSUnderlinePatternSolid 设置下划线/删除线样式为连续的实线
// NSUnderlinePatternDot 设置下划线/删除线样式为点,也就是虚线,比如这样:------
// NSUnderlinePatterDash 设置下划线/删除线样式为破折号,比如这样:—— —— ——
// NSUnderlinePatternDashDot 设置下划线/删除线样式为连续的破折号和点,比如这样:——-——-——-
// NSUnderlinePatternDashDotDot 设置下划线/删除线样式为连续的破折号、点、点,比如:——--——--——--

// NSUnderlineByWord 在有空格的地方不设置下划线/删除线

默认值是NSUnderlineStyleNone。
示例:

NSString *oldPrice = @"¥ 999999";
NSUInteger length = [oldPrice length];
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 删除线
[attri addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(0, length)];
// 删除线颜色
[attri addAttribute:NSStrikethroughColorAttributeName value:[UIColor yellowColor] range:NSMakeRange(0, length)];
lable.attributedText = attri;

效果:

注:如果字符串中有中文的话会导致删除线不显示,解决办法如下

NSBaselineOffsetAttributeName : @(NSUnderlineStyleSingle)

[attr addAttributes:@{NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle), NSStrikethroughColorAttributeName:[HLColorWithHexString colorWithHexString:@"#999999"], NSBaselineOffsetAttributeName : @(NSUnderlineStyleSingle)} range:fightRange];


 8> NSUnderlineStyleAttributeName(下划线)
 该属性所对应的值是一个 NSNumber 对象(整数)。该值指定是否在文字上加上下划线,该值参考NSUnderlineStyle中枚举常量的值。默认值是NSUnderlineStyleNone。

示例:

NSString *oldPrice = @"¥ 999999";
NSUInteger length = [oldPrice length];
    
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 下划线
[attri addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(0, length)];
// 下划线颜色
[attri addAttribute:NSUnderlineColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, length)];
lable.attributedText = attri;

效果:

 9> NSStrokeWidthAttributeName(边线宽度)

负值填充效果,正值中空效果
 该属性所对应的值是一个 NSNumber 对象。该值改变描边宽度(相对于字体size 的百分比)。默认为 0,即不改变。正数只改变描边宽度。
 负数同时改变文字的描边和填充宽度。例如,对于常见的空心字,这个值通常为3.0。

示例:

NSString *oldPrice = @"文字边线宽度效果";
NSUInteger length = [oldPrice length];
    
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 边线宽度 负值
[attri addAttributes:@{NSStrokeWidthAttributeName:@(-3),NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable.attributedText = attri;
    
// 边线宽度 0
[attri addAttributes:@{NSStrokeWidthAttributeName:@(0),NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable1.attributedText = attri;
    
// 边线宽度 正值
[attri addAttributes:@{NSStrokeWidthAttributeName:@(3),NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable2.attributedText = attri;

效果:


 10> NSStrokeColorAttributeName(边线颜色)注:需搭配边线宽度使用
 该属性所对应的值是一个 UIColor 对象。如果该属性不指定(默认),则等同于 NSForegroundColorAttributeName。
 否则,指定为删除线或下划线颜色。
示例:

NSString *oldPrice = @"文字边线颜色效果";
NSUInteger length = [oldPrice length];
    
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 边线宽度 负值
[attri addAttributes:@{NSStrokeWidthAttributeName:@(-3),NSStrokeColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable.attributedText = attri;
    
// 边线宽度 0
[attri addAttributes:@{NSStrokeWidthAttributeName:@(0),NSStrokeColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable1.attributedText = attri;
    
// 边线宽度 正值
[attri addAttributes:@{NSStrokeWidthAttributeName:@(3),NSStrokeColorAttributeName:[UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable2.attributedText = attri;

效果:


 11> NSShadowAttributeName(阴影)
 该属性所对应的值是一个 NSShadow 对象(//NSShadow 对象比较简单,只有3个属性:阴影颜色,模糊半径和偏移)。默认为 nil。
示例:

NSString *oldPrice = @"文字阴影效果";
NSUInteger length = [oldPrice length];
    
NSShadow *shadow1 = [[NSShadow alloc] init];  //NSShadow 对象比较简单,只有3个属性:阴影颜色,模糊半径和偏移
shadow1.shadowOffset = CGSizeMake(3, 3);      //阴影偏移(X方向偏移和Y方向偏移)
shadow1.shadowBlurRadius = 0.5;               //模糊半径 (值越大越模糊)
shadow1.shadowColor = [UIColor orangeColor];  //阴影颜色
    
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];

[attri addAttributes:@{NSShadowAttributeName:shadow1,NSFontAttributeName:[UIFont systemFontOfSize:35]} range:NSMakeRange(0, length)];
lable.attributedText = attri;

效果:


 12> NSVerticalGlyphFormAttributeName(横竖排版)
 该属性所对应的值是一个 NSNumber 对象(整数)。0 表示横排文本。1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义。

13. NSTextEffectAttributeName设置文本特殊效果,取值为 NSString 对象,目前只有一个可用的特效:   // NSTextEffectLetterpressStyle(凸版印刷效果),适用于iOS 7.0及以上         

效果不明显,暂且搁置

14.NSBaselineOffsetAttributeName 设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏 

 示例:

NSString *oldPrice = @"文字基线偏移";
NSUInteger length = [oldPrice length];
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 正值上偏
[attri addAttributes:@{NSBaselineOffsetAttributeName: @(10),NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable.attributedText = attri;
    
[attri addAttributes:@{NSBaselineOffsetAttributeName: @(0),NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable1.attributedText = attri;
// 负值下偏
[attri addAttributes:@{NSBaselineOffsetAttributeName: @(-10),NSFontAttributeName:[UIFont systemFontOfSize:15],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable2.attributedText = attri;

效果:

15.NSObliquenessAttributeName 设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾

示例:

NSString *oldPrice = @"文字倾斜";
NSUInteger length = [oldPrice length];
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 正值右倾
[attri addAttributes:@{NSObliquenessAttributeName: @(1),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable.attributedText = attri;
    
[attri addAttributes:@{NSObliquenessAttributeName: @(0),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable1.attributedText = attri;
// 负值左倾
[attri addAttributes:@{NSObliquenessAttributeName: @(-1),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable2.attributedText = attri;

效果:

16.NSExpansionAttributeName 设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本 

示例:

NSString *oldPrice = @"文字拉伸";
NSUInteger length = [oldPrice length];
NSMutableAttributedString *attri = [[NSMutableAttributedString alloc] initWithString:oldPrice];
// 正值拉伸
[attri addAttributes:@{NSExpansionAttributeName: @(1),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable.attributedText = attri;
    
[attri addAttributes:@{NSExpansionAttributeName: @(0),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable1.attributedText = attri;
// 负值压缩
[attri addAttributes:@{NSExpansionAttributeName: @(-1),NSFontAttributeName:[UIFont systemFontOfSize:25],NSForegroundColorAttributeName: [UIColor grayColor]} range:NSMakeRange(0, length)];
lable2.attributedText = attri;

效果:

17.NSWritingDirectionAttributeName 设置文字书写方向,取值为以下组合     

//@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding)]
//@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride)]
//@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionEmbedding)]
//@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]

示例:

NSString *oldPrice = @"文字书写方向!";
NSDictionary *attrDict1 = @{ NSWritingDirectionAttributeName: @[@(NSWritingDirectionLeftToRight |NSTextWritingDirectionEmbedding)],NSFontAttributeName: [UIFont systemFontOfSize:20] };
lable.attributedText = [[NSAttributedString alloc] initWithString:oldPrice attributes: attrDict1];
NSDictionary *attrDict2 = @{ NSWritingDirectionAttributeName: @[@(NSWritingDirectionRightToLeft |NSTextWritingDirectionOverride)],NSFontAttributeName: [UIFont systemFontOfSize:20] };
lable1.attributedText = [[NSAttributedString alloc] initWithString:oldPrice attributes: attrDict2];
NSDictionary *attrDict3 = @{ NSWritingDirectionAttributeName: @[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride)], NSFontAttributeName: [UIFont systemFontOfSize:20] };
lable2.attributedText = [[NSAttributedString alloc] initWithString:oldPrice attributes: attrDict3];

效果:

   

18.NSLinkAttributeName 链接属性点击将启动浏览器打开一个URL地址,中间用到一个代理函数,UILabel 和 UITextField 无法使用该属性,所以只能用UITextView来做示例。

示例:

UITextView *_textview01 = [[UITextView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:_textview01];
NSDictionary *attrDict1 = @{ NSLinkAttributeName: [NSURL URLWithString: @"http://www.baidu.com"], NSFontAttributeName: [UIFont systemFontOfSize:20] };
//必须禁止输入,否则点击将弹出输入键盘
_textview01.editable = NO;
//可选
_textview01.scrollEnabled = NO;
//必须设置,否则代理函数不会被回调
_textview01.delegate = self;
_textview01.attributedText = [[NSAttributedString alloc] initWithString:@"点击打开百度首页" attributes: attrDict1];

效果:点击后通过手机浏览器打开百度首页

19.NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排

示例:

NSString *originStr = @"图文混排";
NSMutableAttributedString *attrStr01 = [[NSMutableAttributedString alloc] initWithString: originStr];
[attrStr01 addAttribute: NSFontAttributeName value: [UIFont systemFontOfSize: 25] range: NSMakeRange(0, originStr.length)];
NSTextAttachment *textAttachment01 = [[NSTextAttachment alloc] init];
//设置图片源
textAttachment01.image = [UIImage imageNamed: @"雪花.jpg"];
//设置图片位置和大小
textAttachment01.bounds = CGRectMake(0, 0, 30, 30);
NSAttributedString *attrStr11 = [NSAttributedString attributedStringWithAttachment: textAttachment01];
//NSTextAttachment占用一个字符长度,插入后原字符串长度增加1
[attrStr01 insertAttributedString: attrStr11 atIndex: 1];
_label01.attributedText = attrStr01;

效果:

 

共有 人打赏支持
粉丝 2
博文 46
码字总数 47566
×
业界小白
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: