iOS–NSAttributedString使用介绍

原文见:

http://www.itnose.net/detail/6177538.html

http://www.csdn123.com/html/topnews201408/92/1692.htm

转载地址:http://blog.csdn.net/lotheve/article/details/46849873

字符属性介绍:

//NSAttributedString的属性:
// NSFontAttributeName 设置字体属性,取值为 UIFont类型,默认值:字体:Helvetica(Neue)字号:12
// NSForegroundColorAttributeNam 设置字体颜色,取值为 UIColor对象,默认值为黑色
// NSBackgroundColorAttributeName 设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil,透明色
// NSLigatureAttributeName 设置连体属性,取值为NSNumber 对象(整数),0表示没有连体字符,1表示使用默认的连体字符
// NSKernAttributeName 设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄
// NSStrikethroughStyleAttributeName 设置删除线,取值为 NSNumber 对象(整数)
// NSStrikethroughColorAttributeName 设置删除线颜色,取值为 UIColor 对象,默认值为黑色
// NSUnderlineStyleAttributeName 设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似
// NSUnderlineColorAttributeName 设置下划线颜色,取值为 UIColor 对象,默认值为黑色
// NSStrokeWidthAttributeName 设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果
// NSStrokeColorAttributeName 填充部分颜色,不是字体颜色,取值为 UIColor 对象
// NSShadowAttributeName 设置阴影属性,取值为 NSShadow 对象
// NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用:
// NSBaselineOffsetAttributeName 设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏
// NSObliquenessAttributeName 设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾
// NSExpansionAttributeName 设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本
// NSWritingDirectionAttributeName 设置文字书写方向,从左向右书写或者从右向左书写
// NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为 NSNumber 对象(整数),0表示横排文本,1表示竖排文本
// NSLinkAttributeName 设置链接属性,点击后调用浏览器打开指定URL地址
// NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排
// NSParagraphStyleAttributeName 设置文本段落排版格式,取值为 NSParagraphStyle 对象

字符属性

字符属性可以应用于 attributedstring 的文本中。另外,可以直接设置UILabel、UITextField、UITextView的富文本属性attributedText

  1. NSFontAttributeName 设置字体属性,默认值:字体:Helvetica(Neue) 字号:12

  2. NSForegroundColorAttributeNam 设置字体颜色,取值为 UIColor对象,默认值为黑色

  3. NSBackgroundColorAttributeName 设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色

  4. NSLigatureAttributeName 设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符。2 表示使用所有连体符号,默认值为 1(iOS 不支持 2)

  5. NSKernAttributeName 设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄

  6. NSStrikethroughStyleAttributeName 设置删除线,取值为 NSNumber 对象(整数)

    1.枚举常量 NSUnderlineStyle中的值
    // NSUnderlineStyleNone 不设置删除线
    // NSUnderlineStyleSingle 设置删除线为细单实线
    // NSUnderlineStyleThick 设置删除线为粗单实线
    // NSUnderlineStyleDouble 设置删除线为细双实线
    2.**注意**:虽然使用了枚举常量,但是枚举常量的本质仍为整数,所以同样必须先转化为 NSNumber 才能使用
    3.删除线和下划线使用相同的枚举常量作为其属性值
    4.目前iOS中只有上面列出的4中效果,虽然我们能够在头文件中发现其他更多的取值,但是使用后没有任何效果
    5.另外,删除线属性取值除了上面的4种外,其实还可以取其他整数值,有兴趣的可以自行试验,取值为 0 - 7时,效果为单实线,随着值得增加,单实线逐渐变粗,取值为 9 - 15时,效果为双实线,取值越大,双实线越粗。
  7. NSStrikethroughColorAttributeName 设置删除线颜色,取值为 UIColor 对象,默认值为黑色

  8. NSUnderlineStyleAttributeName 设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似

  9. NSUnderlineColorAttributeName 设置下划线颜色,取值为 UIColor 对象,默认值为黑色

    NSShadow介绍://NSShadow 对象比较简单,只有3个属性:阴影颜色,模糊半径和偏移
    NSShadow *shadow1 = [[NSShadow alloc] init];
    shadow1.shadowOffset = CGSizeMake(3, 3); //阴影偏移(X方向偏移和Y方向偏移)
    shadow1.shadowBlurRadius = 0.5; //模糊半径
    shadow1.shadowColor = [UIColor orangeColor]; //阴影颜色
  10. NSStrokeWidthAttributeName 设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果

  11. NSStrokeColorAttributeName 填充部分颜色,不是字体颜色,取值为 UIColor 对象

  12. NSShadowAttributeName 设置阴影属性,取值为 NSShadow 对象

  13. NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有一个可用的特效

    //NSTextEffectLetterpressStyle(凸版印刷效果),适用于iOS 7.0及以上
  14. NSBaselineOffsetAttributeName 设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏

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

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

  17. NSWritingDirectionAttributeName 设置文字书写方向,从左向右书写或者从右向左书写

    设置文字书写方向,取值为以下组合
    //@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding)]
    //@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride)]
    //@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionEmbedding)]
    //@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]
    一直没搞明白 NSTextWritingDirectionEmbedding 和 NSTextWritingDirectionOverride 有什么不同的效果。
  18. NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义

  19. NSLinkAttributeName 设置链接属性,点击后调用浏览器打开指定URL地址

    NSDictionary *attrDict1 = @{ NSLinkAttributeName: [NSURL URLWithString: @"http://www.baidu.com"],
    NSFontAttributeName: [UIFont systemFontOfSize:20]
    }; _textview.editable = NO; //必须禁止输入,否则点击将弹出输入键盘
    _textview.scrollEnabled = NO; //可选
    _textview.delegate = self; //必须设置,否则代理函数不会被回调 _textview.attributedText = [[NSAttributedString alloc] initWithString: originStr attributes: attrDict1];
    代理函数:
    - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
    return YES;
    }
  20. NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排

    NSTextAttachment *textAttachment = [[NSTextAttachment alloc] init];
    textAttachment.image = [UIImage imageNamed: @"10000.jpeg"]; //设置图片源
    textAttachment.bounds = CGRectMake(0, 0, 30, 30); //设置图片位置和大小(***x,y都不起效***)
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString: originStr]; [attrStr addAttribute: NSFontAttributeName value: [UIFont systemFontOfSize: 25] range: NSMakeRange(0, originStr.length)];
    NSAttributedString *attrStr = [NSAttributedString attributedStringWithAttachment: textAttachment]; [attrStr insertAttributedString: attrStr atIndex: 2]; //NSTextAttachment占用一个字符长度,插入后原字符串长度增加1 _label.attributedText = attrStr;
  21. NSParagraphStyleAttributeName 设置文本段落排版格式,取值为 NSParagraphStyle 对象

    // 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

*NSParagraphStyleAttributeName*

  1. alignment 对齐方式,取值枚举常量 NSTextAlignment

    enum {
    NSTextAlignmentLeft = 0,
    NSTextAlignmentCenter = 1,
    NSTextAlignmentRight = 2,
    NSTextAlignmentJustified = 3,
    NSTextAlignmentNatural = 4,
    };
  2. firstLineHeadIndent 首行缩进,取值 float

  3. headIndent 缩进,取值 float

  4. tailIndent 尾部缩进,取值 float,注意距离是从行首算起

  5. ineHeightMultiple 可变行高,乘因数,取值 float,大于1行高变大,小于1行高变小,实际上字体大小不会改变,改变的是行间距

  6. maximumLineHeight 最大行高,取值 float,若其值小于默认行高,则行间距变小,若其值大于默认行高,则不会引起任何变化

  7. minimumLineHeight 最小行高,取值 float,若其值大于默认行高,则行间距变大,若其值小于默认行高,则不会引起任何变化

  8. lineSpacing 行距,取值 float,可正可负,正值增加行距,负值减小行距

  9. paragraphSpacing 段距,取值 float,负值无效,取0值

  10. paragraphSpacingBefore 段首空间,取值 float,最小取值为0

  11. baseWritingDirection 句子方向,取值枚举常量NSWritingDirection

        enum {
    NSWritingDirectionNatural = -1,
    NSWritingDirectionLeftToRight = 0,
    NSWritingDirectionRightToLeft = 1
    };
    typedef NSInteger NSWritingDirection;
  12. lineBreakMode 断行方式,取值枚举常量 NSLineBreakMode

        enum {
    NSLineBreakByWordWrapping = 0, //自动换行,单词切断
    NSLineBreakByCharWrapping, //自动换行,字母切断
    NSLineBreakByClipping, //非自动换行,不切断
    NSLineBreakByTruncatingHead, //非自动换行,行首切断
    NSLineBreakByTruncatingTail, //非自动换行,行尾切断
    NSLineBreakByTruncatingMiddle //非自动换行,中间切断
    };
    typedef NSUInteger NSLineBreakMode;
  13. hyphenationFactor 连字符属性,取值 0 到 1 之间,开启断词功能

通过使用boundingRectWithSize, 计算UILable高度

使用方法:- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(6_0);

使用时的注意事项:

  • NSAttributedString 的每个部分都要至少设置两个属性:

    • NSFontAttributeName
    • NSForegroundColorAttributeName
  • NSStringDrawingOptions 的值, 在多行的情况下, 至少要

    • NSStringDrawingUsesLineFragmentOrigin
    • NSStringDrawingUsesFontLeading

下面是示范代码:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:@"测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串测试计算高度字符串1"];
[string setAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:14], NSForegroundColorAttributeName:[UIColor blueColor]} range:NSMakeRange(0, string.length)];
[string addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(0, 11)];
NSMutableParagraphStyle *paragraghStyle = [[NSMutableParagraphStyle alloc]init];
paragraghStyle.lineSpacing = 20;
[string addAttribute:NSParagraphStyleAttributeName value:paragraghStyle range:NSMakeRange(0, string.length)];
CGSize size = [string boundingRectWithSize:CGSizeMake(200, 500) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin context:nil].size; UILabel *label = [[UILabel alloc]init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.backgroundColor = [UIColor redColor];
label.attributedText = string;
label.frame = CGRectMake(0, 100, size.width, size.height);
[self.view addSubview:label];

效果图为:

iOS--NSAttributedString使用介绍的更多相关文章

  1. iOS Simulator功能介绍关于Xamarin IOS开发

    iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator.在没有iPh ...

  2. iOS: 属性列表介绍 Introduction to Property Lists

    iOS: 属性列表介绍 Introduction to Property Lists 从本质上说, 属性列表就是苹果的对象数据序列化与反序列化方式 属性列表使用几种数据类型把数据组织为键值表和值表 P ...

  3. ios中框架介绍

    ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...

  4. ios NSAttributedString 具体解释

    ios NSAttributedString 具体解释 NSAttributedString能够让我们使一个字符串显示的多样化,可是眼下到iOS 5为止,好像对它支持的不是非常好,由于显示起来不太方便 ...

  5. 【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得

    [整理]Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得 iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具 ...

  6. IOS自动化打包介绍

    IOS自动化打包介绍  标签: app打包 , Ios打包 , iphone打包 , iphone自动化打渠道包    分类:无线客户端技术, 贴吧技术 摘要 随着苹果手持设备用户的不断增加,ios应 ...

  7. iOS 常用框架介绍

    iOS框架介绍      Cocoa Touch   GameKit  实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息  iOS设备之间蓝牙数据传输   从iOS7开始过期   局域网游 ...

  8. [iOS]MVVM-框架介绍

       我于 2011 年在 500px 找到自己的第一份 iOS 开发工作.虽然我已经在大学里做了好几年 iOS 外包开发,但这才是我的一个真正的 iOS 开发工作.我被作为唯一的 iOS 开发者被招 ...

  9. iOS中Block介绍(一)基础

    ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...

  10. iOS推送介绍

    iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...

随机推荐

  1. Django如何设置proxy

    设置porxy的原因 一般情况下我们代理设置是针对与浏览器而言,通常只需在浏览器设置中进行配置,但它只针对浏览器有效,对我们自己编写的程序并任何效果,这时就需要我们在软件编码中加入代理设置. --- ...

  2. C++编译器合成Default Constructor的4种情况

    笔记C++编译器为编译器需要合成Default Constructor的4种情况. 1,Class A内含Class B对象,Class A没有Default Constructor时会在编译时合成D ...

  3. jquery GET POST

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <head> ...

  4. 【技术贴】解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法

    [技术贴]解决myeclipse SVN 提交代码 commit:remains in tree-conflict错误的解决办法 错误是:Aborting commit: xxxxx’ remains ...

  5. SQL servere 范式、事务

    一.数据库范式: 1.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式. 范式是符合某一种级别的关系模式的集合.数据库中的关系必须满足一定的要求,即满足不同的范式. 满足最低要求的范式是 ...

  6. [FJSC2014]折线统计

    [题目描述] 二维平面上有n 个点(xi, yi),现在这些点中取若干点构成一个集合S,对它们按照x 坐标排序,顺次连接,将会构成一些连续上升.下降的折线,设其数量为f(S).如下图中,1->2 ...

  7. WordPress 开放重定向漏洞

    漏洞名称: WordPress 开放重定向漏洞 CNNVD编号: CNNVD-201309-167 发布时间: 2013-09-13 更新时间: 2013-09-13 危害等级: 高危   漏洞类型: ...

  8. unicode随笔小计

    科普字符集: ascii:一个字节,占8位,(0000 0000 - 1111 1111) 如果只是英语那就没什么问题. 后来,不同的语言有了编码诞生.为了统一,出现一个大集合.便有了. unicod ...

  9. 锐浪应用小插曲,asp.net下的使用

    下午提前完成了今天的工作内容,整了下bs中的应用,嘿嘿,其中遇到不少问题,接下来说下大概会遇到哪些问题,1:grid++ 6.0插件下载安装之后ie浏览器无法打开,居然什么都没有显示,奇葩啊,系统版本 ...

  10. CSS3 概览 更新时间 2014-0412-1317

    CSS3 概览 CSS3可以划分为:文字.边框模型.背景.动画等. CSS3颜色模块 CSS2.1的时候可以使用4种颜色方式,直接使用颜色名,如 redRGB值,如 rgb(0,90,255)RGB百 ...