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


二、段落布局时可能会导致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])];



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值