iOS--NSAttributedString使用介绍
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
NSFontAttributeName设置字体属性,默认值:字体:Helvetica(Neue) 字号:12NSForegroundColorAttributeNam设置字体颜色,取值为 UIColor对象,默认值为黑色NSBackgroundColorAttributeName设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色NSLigatureAttributeName设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符。2 表示使用所有连体符号,默认值为 1(iOS 不支持 2)NSKernAttributeName设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄NSStrikethroughStyleAttributeName设置删除线,取值为 NSNumber 对象(整数)1.枚举常量 NSUnderlineStyle中的值
// NSUnderlineStyleNone 不设置删除线
// NSUnderlineStyleSingle 设置删除线为细单实线
// NSUnderlineStyleThick 设置删除线为粗单实线
// NSUnderlineStyleDouble 设置删除线为细双实线
2.**注意**:虽然使用了枚举常量,但是枚举常量的本质仍为整数,所以同样必须先转化为 NSNumber 才能使用
3.删除线和下划线使用相同的枚举常量作为其属性值
4.目前iOS中只有上面列出的4中效果,虽然我们能够在头文件中发现其他更多的取值,但是使用后没有任何效果
5.另外,删除线属性取值除了上面的4种外,其实还可以取其他整数值,有兴趣的可以自行试验,取值为 0 - 7时,效果为单实线,随着值得增加,单实线逐渐变粗,取值为 9 - 15时,效果为双实线,取值越大,双实线越粗。
NSStrikethroughColorAttributeName设置删除线颜色,取值为 UIColor 对象,默认值为黑色NSUnderlineStyleAttributeName设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似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]; //阴影颜色
NSStrokeWidthAttributeName设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果NSStrokeColorAttributeName填充部分颜色,不是字体颜色,取值为 UIColor 对象NSShadowAttributeName设置阴影属性,取值为 NSShadow 对象NSTextEffectAttributeName设置文本特殊效果,取值为 NSString 对象,目前只有一个可用的特效//NSTextEffectLetterpressStyle(凸版印刷效果),适用于iOS 7.0及以上
NSBaselineOffsetAttributeName设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏NSObliquenessAttributeName设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾NSExpansionAttributeName设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本NSWritingDirectionAttributeName设置文字书写方向,从左向右书写或者从右向左书写设置文字书写方向,取值为以下组合
//@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionEmbedding)]
//@[@(NSWritingDirectionLeftToRight | NSTextWritingDirectionOverride)]
//@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionEmbedding)]
//@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]
一直没搞明白 NSTextWritingDirectionEmbedding 和 NSTextWritingDirectionOverride 有什么不同的效果。
NSVerticalGlyphFormAttributeName设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本。在 iOS 中,总是使用横排文本,0 以外的值都未定义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;
}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;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*
alignment 对齐方式,取值枚举常量 NSTextAlignment
enum {
NSTextAlignmentLeft = 0,
NSTextAlignmentCenter = 1,
NSTextAlignmentRight = 2,
NSTextAlignmentJustified = 3,
NSTextAlignmentNatural = 4,
};firstLineHeadIndent 首行缩进,取值 float
headIndent 缩进,取值 float
tailIndent 尾部缩进,取值 float,注意距离是从行首算起
ineHeightMultiple 可变行高,乘因数,取值 float,大于1行高变大,小于1行高变小,实际上字体大小不会改变,改变的是行间距
maximumLineHeight 最大行高,取值 float,若其值小于默认行高,则行间距变小,若其值大于默认行高,则不会引起任何变化
minimumLineHeight 最小行高,取值 float,若其值大于默认行高,则行间距变大,若其值小于默认行高,则不会引起任何变化
lineSpacing 行距,取值 float,可正可负,正值增加行距,负值减小行距
paragraphSpacing 段距,取值 float,负值无效,取0值
paragraphSpacingBefore 段首空间,取值 float,最小取值为0
baseWritingDirection 句子方向,取值枚举常量NSWritingDirection
enum {
NSWritingDirectionNatural = -1,
NSWritingDirectionLeftToRight = 0,
NSWritingDirectionRightToLeft = 1
};
typedef NSInteger NSWritingDirection;lineBreakMode 断行方式,取值枚举常量 NSLineBreakMode
enum {
NSLineBreakByWordWrapping = 0, //自动换行,单词切断
NSLineBreakByCharWrapping, //自动换行,字母切断
NSLineBreakByClipping, //非自动换行,不切断
NSLineBreakByTruncatingHead, //非自动换行,行首切断
NSLineBreakByTruncatingTail, //非自动换行,行尾切断
NSLineBreakByTruncatingMiddle //非自动换行,中间切断
};
typedef NSUInteger NSLineBreakMode;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使用介绍的更多相关文章
- iOS Simulator功能介绍关于Xamarin IOS开发
iOS Simulator功能介绍关于Xamarin IOS开发 iOS Simulator功能介绍 在图1.38所示的运行效果中,所见到的类似于手机的模型就是iOS Simulator.在没有iPh ...
- iOS: 属性列表介绍 Introduction to Property Lists
iOS: 属性列表介绍 Introduction to Property Lists 从本质上说, 属性列表就是苹果的对象数据序列化与反序列化方式 属性列表使用几种数据类型把数据组织为键值表和值表 P ...
- ios中框架介绍
ios中框架介绍 参考博客: 参考文章:框架介绍 框架介绍 框架就是一个目录,一个目录包含了共享库,访问共享库里面的代码的头文件,和其他的图片和声音的资源文件.一个共享库定义的方法和函数可以被应用程序 ...
- ios NSAttributedString 具体解释
ios NSAttributedString 具体解释 NSAttributedString能够让我们使一个字符串显示的多样化,可是眼下到iOS 5为止,好像对它支持的不是非常好,由于显示起来不太方便 ...
- 【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
[整理]Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得 iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具 ...
- IOS自动化打包介绍
IOS自动化打包介绍 标签: app打包 , Ios打包 , iphone打包 , iphone自动化打渠道包 分类:无线客户端技术, 贴吧技术 摘要 随着苹果手持设备用户的不断增加,ios应 ...
- iOS 常用框架介绍
iOS框架介绍 Cocoa Touch GameKit 实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息 iOS设备之间蓝牙数据传输 从iOS7开始过期 局域网游 ...
- [iOS]MVVM-框架介绍
我于 2011 年在 500px 找到自己的第一份 iOS 开发工作.虽然我已经在大学里做了好几年 iOS 外包开发,但这才是我的一个真正的 iOS 开发工作.我被作为唯一的 iOS 开发者被招 ...
- iOS中Block介绍(一)基础
ios开发block的使用指南,以及深入理解block的内存管理,也适用于osx开发.讨论范围:block的使用,内存管理,内部实现.不包含的内容:gc arc下的block内存,block在c++中 ...
- iOS推送介绍
iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...
随机推荐
- Python核心编程2第三章课后练习
1. 标识符.为什么Python 中不需要变量名和变量类型声明? Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程.每个变量在内存中创建,都包括变量的标识,名称和数据这些信息.每 ...
- 简单python2.7.3安装setuptools模块
下载setuptools https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg 安装 .6c11- ...
- ASP.NET MVC轻教程 Step By Step 12——客户端验证
前面两节使用的两种数据验证方法都是在服务器端进行的,也就是提交了表单,数据回传给服务器才能验证.这样会带来两个问题,一是用户体验不好,用户提交了表单之后才知道存在问题:二是会给服务器带来额外的压力.我 ...
- Linux内核监控模块-2-系统调用表地址的获取(Linux内核版本3.13)
那么在Linux内核2.6之后,不能直接导出sys_call_table的地址后,我们要如何获得系统调用表的地址,从而实现系统调用的截获呢. 先贴上我实现好的代码,然后再来讲解吧. modu.c #i ...
- c语言技巧--长期更新
1. #define LOWER(c) (unsigned char)(c | 0x20) 换成小写 2. gcc -Wall -Werror //告警当成 错误来处理 ...
- [BZOJ 1029] [JSOI2007] 建筑抢修 【贪心】
题目链接:BZOJ - 1029 题目分析 使用一种贪心策略. 现将任务按照deadline从小到大排序. 然后枚举每一个任务,如果当前消耗的时间加上完成这个任务的时间不会超过这个任务的deadlin ...
- attr
今天用attr的时候忽然不知道html中没有的attribute可以不可以用该方法新增了, 查了appframework的文档,居然木有看出解答. 百度之,js原生的setAttribute当然是可以 ...
- 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
http://www.csdn.net/article/2014-06-05/2820089 摘要:MapReduce在实时查询和迭代计算上仍有较大的不足,目前,Spark由于其可伸缩.基于内存计算等 ...
- 【HDU3440】House Man (差分约束)
题目: Description In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop ...
- 有关AVR的介绍
Atmel扩展AVR MCU系列 优化内存.连接性.集成性和超低功耗 http://avr.eefocus.com/article/12-03/833141332293957.html AVR单片 ...