2017 IOS 关于CoreText的笔记
2017-07-01 15:59
246 查看
一.CoreText计算attributeString显示所占区域:
百度搜索有三种方法:
1.方法 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context
2.使用CTFrameRef 的 CTFrameGetLineOrigins() 方法,获取最后一行的高度。
3.使用CTFramesetter 的 CTFramesetterSuggestFrameSizeWithConstraints() 方法。(推荐)
第一种方法,会出现crash,如果attributeString设置的比较复杂(比如图文混杂)、没有设置字体(),具体是哪个原因,我不想试(布局有点多),总之crash。这个方法如果用在NSString上没有问题。
第二种方法,只有实际开始绘制的时候,才能知道,无法提前适配容器(比如table的Cell高度、比如scrollView的contentSize)。
第三种方法,这个方法最好,配置好NSMutableAttributedString就能使用CTFramesetter来提前计算内容的高度,却而不需要等开始绘制了才知道(而且CTFramesetter的创建是比较吃内存的,复用CTFramesetter会好很多)。
二、段落布局时可能会导致crash的坑,比如:
//创建文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting alignmentStyle;
//设置文本行间距
CGFloat lineSpace = 4.0;
CTParagraphStyleSetting lineSpaceStyle;
//设置文本段间距
CGFloat paragraphSpacing = 12.0;
CTParagraphStyleSetting paragraphSpaceStyle;
//创建设置数组
CTParagraphStyleSetting settings[ ] ={alignmentStyle,lineSpaceStyle,paragraphSpaceStyle};
CTParagraphStyleRef style = CTParagraphStyleCreate(settings ,
3);//CTParagraphStyleCreate的第二个参数,不要用sizeof(settings),crash的原因。
[attributedString addAttribute:(id)kCTParagraphStyleAttributeName value:(id)style range:NSMakeRange(0 , [string length])];
百度搜索有三种方法:
1.方法 - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(nullable NSStringDrawingContext *)context
2.使用CTFrameRef 的 CTFrameGetLineOrigins() 方法,获取最后一行的高度。
3.使用CTFramesetter 的 CTFramesetterSuggestFrameSizeWithConstraints() 方法。(推荐)
第一种方法,会出现crash,如果attributeString设置的比较复杂(比如图文混杂)、没有设置字体(),具体是哪个原因,我不想试(布局有点多),总之crash。这个方法如果用在NSString上没有问题。
第二种方法,只有实际开始绘制的时候,才能知道,无法提前适配容器(比如table的Cell高度、比如scrollView的contentSize)。
第三种方法,这个方法最好,配置好NSMutableAttributedString就能使用CTFramesetter来提前计算内容的高度,却而不需要等开始绘制了才知道(而且CTFramesetter的创建是比较吃内存的,复用CTFramesetter会好很多)。
二、段落布局时可能会导致crash的坑,比如:
//创建文本对齐方式
CTTextAlignment alignment = kCTLeftTextAlignment;
CTParagraphStyleSetting alignmentStyle;
//设置文本行间距
CGFloat lineSpace = 4.0;
CTParagraphStyleSetting lineSpaceStyle;
//设置文本段间距
CGFloat paragraphSpacing = 12.0;
CTParagraphStyleSetting paragraphSpaceStyle;
//创建设置数组
CTParagraphStyleSetting settings[ ] ={alignmentStyle,lineSpaceStyle,paragraphSpaceStyle};
CTParagraphStyleRef style = CTParagraphStyleCreate(settings ,
3);//CTParagraphStyleCreate的第二个参数,不要用sizeof(settings),crash的原因。
[attributedString addAttribute:(id)kCTParagraphStyleAttributeName value:(id)style range:NSMakeRange(0 , [string length])];
相关文章推荐
- 12.24笔记(关于//UIDynamic演练//多对象的附加行为//UIDynamic简单演练//UIDynamic//(CoreText框架)NSAttributedString)
- [iOS]CoreText 学习笔记(1)
- iOS 学习笔记10 core Text 对齐方式
- NT_iOS笔记—CoreText添加文字背景色(搜索的高亮显示)
- 关于coretext绘图字体始终无法改变大小的原因
- IOS绘图控件Core-plot学习笔记
- IOS利用Core Text对文字进行排版
- iOS上的富文本控件-DTCoreTextView
- IOS利用Core Text对文字进行排版
- IOS CoreText.framework --- 基本用法
- IOS学习笔记(6)label textField textview
- IOS core text计算文本高度及最大宽度
- iOS学习笔记之CoreGraphics框架
- IOS 学习笔记--关于对Block的理解
- iOS应用开发视频教程笔记(十一)Core Location and Map Kit
- iOS学习笔记2—关于tableView的一些简单操作
- 关于stm32的USB学习笔记之usbcore.c
- 关于ios新浪sdk学习笔记
- <原>第五章-CoreText-学习笔记1
- iOS:Core Animation笔记(1)