iOS之富文本(一)

NSAttributedString叫做富文本,是一种带有属性的字符串,通过它可以轻松的在一个字符串中表现出多种字体、字号、字体大小等各不相同的风格,还可以对段落进行格式化。

通过以下代码即可实现上面图示效果,十分方便,从此再也不用设置两个UILable,并且处心积虑的处理它们的长度了。

 1     UILabel * aLable = [[UILabel alloc] initWithFrame:CGRectMake(100, 500, 200, 40)];
 2     aLable.textAlignment = NSTextAlignmentCenter;
 3     [self.view addSubview:aLable];
 4
 5     NSString * aString = @"¥150 元/位";
 6
 7     //富文本对象
 8     NSMutableAttributedString * aAttributedString = [[NSMutableAttributedString alloc] initWithString:aString];
 9
10     //富文本样式
11     [aAttributedString addAttribute:NSForegroundColorAttributeName  //文字颜色
12                               value:[UIColor redColor]
13                               range:NSMakeRange(0, 4)];
14
15     [aAttributedString addAttribute:NSFontAttributeName             //文字字体
16                               value:[UIFont systemFontOfSize:25]
17                               range:NSMakeRange(0, 4)];
18
19     aLable.attributedText = aAttributedString;

常用属性:

NSFontAttributeName           文字字体

NSParagraphStyleAttributeName     段落样式(字符串通过“\n”进行分段,此设置必须在lable.numberOfLines = 0时有效,value通过NSMutableParagraphStyle设置,它有以下属性)

 [段落样式-插曲] 1 @property(readwrite) CGFloat lineSpacing;              //行间距
 2 @property(readwrite) CGFloat paragraphSpacing;           //段间距
 3 @property(readwrite) NSTextAlignment alignment;           //对齐方式
 4 @property(readwrite) CGFloat firstLineHeadIndent;          //首行缩紧
 5 @property(readwrite) CGFloat headIndent;               //除首行之外其他行缩进
 6 @property(readwrite) CGFloat tailIndent;               //每行容纳字符的宽度
 7 @property(readwrite) NSLineBreakMode lineBreakMode;         //换行方式
 8 @property(readwrite) CGFloat minimumLineHeight;           //最小行高
 9 @property(readwrite) CGFloat maximumLineHeight;           //最大行高
10 @property(readwrite) NSWritingDirection baseWritingDirection;  //书写方式(NSWritingDirectionNatural,NSWritingDirectionLeftToRight,NSWritingDirectionRightToLeft)11 @property(readwrite) CGFloat lineHeightMultiple;12 @property(readwrite) CGFloat paragraphSpacingBefore;13 @property(readwrite) float hyphenationFactor;14 @property(readwrite,copy,NS_NONATOMIC_IOSONLY) NSArray *tabStops NS_AVAILABLE_IOS(7_0);15 @property(readwrite,NS_NONATOMIC_IOSONLY) CGFloat defaultTabInterval NS_AVAILABLE_IOS(7_0);
 [段落样式demo] 1     UILabel * lable = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, self.view.frame.size.width-100, 200)];
 2     lable.backgroundColor = [UIColor lightGrayColor];
 3     lable.numberOfLines = 0;
 4     [self.view addSubview:lable];
 5
 6     NSString * string = @"Always believe that something wonderful is about \nto happen!";
 7
 8     //富文本
 9     NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:string];
10
11     //段落样式
12     NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
13
14 #warning  lable.numberOfLines必须为0,段落样式才生效
15     //行间距
16     paragraphStyle.lineSpacing = 10.0;
17     //段落间距
18     paragraphStyle.paragraphSpacing = 20.0;
19
20 //    paragraphStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
21 //    paragraphStyle.firstLineHeadIndent = 10.0;
22 //    paragraphStyle.headIndent = 50.0;
23 //    paragraphStyle.tailIndent = 200.0;
24
25     [attributedString addAttribute:NSParagraphStyleAttributeName
26                              value:paragraphStyle
27                              range:NSMakeRange(0, string.length)];
28
29     lable.attributedText = attributedString;


NSForegroundColorAttributeName    文字前景色

NSBackgroundColorAttributeName     文字背景色

NSLigatureAttributeName        连体字(NSNumber  @0:无连体,@1:默认连体,系统字体不包含对连体的支持)

NSUnderlineStyleAttributeName     下划线

NSStrokeColorAttributeName       只有在NSStrokeWidthAttributeName设置了值之后才有效(默认字体颜色和前景色一致,如果设置的颜色和前景色不一致则前景色无效)

NSStrokeWidthAttributeName      设置该属性之后字体变成空心字体,字体边线宽度为value设定的值

NSBaselineOffsetAttributeName     值为NSNumber类型,表明文字相对于其他文字基准线向上的偏移量

NSUnderlineColorAttributeName      值为UIColor类型,下划线颜色(只有在NSUnderlineStyleAttributeName的value为@1时有效)

NSUnderlineStyleAttributeName      值为NSNumber类型,下划线宽度(默认值为@0:下划线宽度为0——不现实下划线,@1:字符串有下划线)

属性挺多的,有其他需要的话command点进去看一下就ok,如果对他们的功能不了解三根指头点一下关键词,或者按住option点一下看看官方文档的Description相信就会有所了解了,其他的暂时就不介绍了。

如有问题,欢迎指正,小弟在此拜谢。

这里有篇讲解富文本的文章:http://www.2cto.com/kf/201409/334308.html

时间: 2024-08-03 19:16:37

iOS之富文本(一)的相关文章

iOS之富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

iOS之富文本(二)

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能

iOS之富文本总结

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

IOS Html富文本渲染方式:DTCoreText、WKWebView、UIWebView的内存占用对比

在app的内容页(详情页)中,富文本的显示一直是经常需要处理的问题,而通常在后端的富文本编辑中,Html应用比较普遍,所以其实需要处理的Html富文本显示的问题,以下这三种方式肯定不是最优的显示Html富文本的方式,只是相对简单的解决方案,对前后端的转换要求少,可以快速集成. 以下对这3种方式进行内存的测试对比,毕竟详情页是相对比较大,而且打开频率高的页面,所以内存占用是必须要考虑的问题. 基本环境: Objective-C Xcode 6.4 Deployment Target IOS 8.0

iOS -- YYText富文本

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithString: [NSString stringWithFormat:@"%@", kRealName]]; [text setYy_color:kDarkColor]; NSMutableAttributedString *one = [[NSMutableAttributedString alloc] initWithString

iOS 富文本格式字符 以及处理iOS8下textview设置富文本后输入bug

iOS的富文本设置,在iOS8下在textView的代理方法中设置textview的attributedText时,会出现富文本格式未加到text上的情况,可以在初始化时将文本属性赋给textview的typingAttributes.代码如下: NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 7;// 字体的行间距 UIF

iOS富文本组件的实现—DTCoreText源码解析 数据篇

本文转载 http://blog.cnbang.net/tech/2630/ DTCoreText是个开源的iOS富文本组件,它可以解析HTML与CSS最终用CoreText绘制出来,通常用于在一些需要显示富文本的场景下代替低性能的UIWebView,来看看它是怎样解析和渲染HTML+CSS的,总体上分成两步: 数据解析—把HTML+CSS转换成NSAttributeString 渲染—用CoreText把NSAttributeString内容渲染出来,再加上图片等元素 本篇先介绍第一步,数据解

iOS 富文本

富文本 http://pan.baidu.com/s/1pJnY8BL 把这里下载的文件夹拖进自己的工程 引入头文件 #import "OHAttributedLabel.h" #import "OHParagraphStyle.h" #import "OHTouchesGestureRecognizer.h" 引入这3个头文件 添加 CoreText.framework // 创建富文本string NSMutableAttributedStr

ios富文本

之前做项目时遇到一个问题: 使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结果在XCode中查遍其所有属性才发现,UITextView居然没有调整行间距的接口,于是忍住不心里抱怨了一下下. 但是问题还是要解决的,上网一查才发现,iOS不仅有富文本处理的功能,而且对于文字排版的处理能力那是相当的强大,看来我是孤陋寡闻了. 正题开始之前插播一点基础知识: 在iOS中或者Mac OS X中怎样才能