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

  • 相关阅读:
    docker build xxx --build-arg设置http_proxy环境变量
    【人工智能】人工智能是什么?如何入门人工智能?我们为什么要学人工智能?
    java中HashMap的设计精妙在哪?
    openssl生成SM2公私钥对命令详解
    Swift Combine 使用 handleEvents 操作符调试管道 从入门到精通二十五
    Java常规题技术分享
    Forescout宣布任命Rik Ferguson为安全情报副总裁
    为什么原生IP可以降低Google play账号关联风险?企业号解决8.3/10.3账号关联问题?
    大学生职业生涯规划包word,ppt模板以及必备素材
    [GAMES101]透视投影变换矩阵中为什么需要改变z值
  • 原文地址:https://blog.csdn.net/u012681458/article/details/74066715