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. GIF文件转换为头文件工具

    目的: GIF文件转为头文件 举例: 用UE打开GIF文件,如下图所示:图1 test.gif文件将上面文件内容转化为头文件,放到一个数组里面,内容如下:图2 test.h文件 思路: 从上面可知,将 ...

  2. android ListView 多次调用 getView方法

    <ListView            android:layout_width="match_parent"            android:layout_heig ...

  3. 用Enterprise Architect从源码自动生成类图

    http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便 ...

  4. [BZOJ 1034] [ZJOI2008] 泡泡堂BNB 【贪心】

    题目链接:BZOJ - 1034 题目分析 这道题和田忌赛马的典故很相似. 先要将两队的队员都按照水平从小到大分别排序. 然后每次尝试用我方最弱的队员赢对方最弱的队员,或者用我方最强的队员赢对方最强的 ...

  5. linux平台的office文档转pdf(程序员的菜)

    需要材料: 1.  Openoffice3.4(我是32位的centos,可以根据自己的系统下载指定的openoffice软件包) 下载地址:http://sourceforge.net/projec ...

  6. WIN10 + VS2015 + WDK10 + SDK10 + VM虚拟机驱动开发调试环境搭建

    http://blog.csdn.net/qing666888/article/details/50858272#comments

  7. JavaScript如何获取css属性

    原文:JavaScript如何获取css属性 在web开发中,很多时候我们需要用JavaScript对网页的样式进行修改,接下来,我们就来看一下我们该如何访问css属性,针对不同情况及案例来进行分析. ...

  8. eclipse下切换svn用户

    在eclipse中经常用到用svn进行代码版本控制,为了提交或更新代码的时候不反复地提示我们输入用户名和密码,于是我们就习惯把访问SVN的用户名密码自动保存起来.以便下次自动使用,不要再次手工输入,但 ...

  9. Git的分支与合并

    在Git里面我们可以创建不同的分支,来进行调试.发布.维护等不同工作,而互不干扰.下面我们还是来创建一个试验仓库,看一下Git分支运作的台前幕后: $rm -rf test_branch_proj $ ...

  10. Java Random随机种子

    第一种情况 Random rand = new Random(47); for(int i=0;i<10;i++) System.out.println(rand.nextInt(100)); ...