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

  • 相关阅读:
    framework.jar如何导入到android studio中进行framework的开发+系统签名
    雷军的演讲以及产品发布
    java计算机毕业设计积分权益商城MyBatis+系统+LW文档+源码+调试部署
    阿里云的CIPU
    一文教你Kali信息收集
    K8s稳居容器榜首,Docker冲顶技术热词,微服务应用热度不减,2021云原生开发者现状
    C++11的一些新特性|右值引用|STL中的一些变化
    【NumPy基础(02) NumPy数组的变形】
    《程序员的职业素养》读书笔记万字总结【建议收藏】
    Vue3中的常见组件通信之v-model
  • 原文地址:https://blog.csdn.net/u012681458/article/details/74066715