IOS 关于CoreText的笔记

放大

一.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会好很多)。
一.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会好很多)。

一.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会好很多)。
f

一.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会好很多)。
一.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会好很多)。
一.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会好很多)。

相关推荐
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
深圳老胡4 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
彧azz4 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师4 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营
`流年づ4 天前
人工智能学习笔记 - 补充
人工智能·笔记·深度学习·学习
qeen874 天前
【Linux】操作系统之进程介绍(二)
linux·笔记·学习·进程
从零开始的嵌入式之旅4 天前
day47
arm开发·经验分享·笔记·嵌入式硬件
茶底世界之下4 天前
为什么预览、录制、离线导出不能共享同一个背压策略?
ios·swift
2501_916007474 天前
苹果商店iOS应用上架费用全面解析:开发者计划与审核费用计算
android·ios·小程序·https·uni-app·iphone·webview