核心文本 – CoreText.如何计算定义的字符串的边界框?

前端之家收集整理的这篇文章主要介绍了核心文本 – CoreText.如何计算定义的字符串的边界框?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在CoreText中,很容易问:“给定的矩形有多少这个归因的字符串将适合?”
CTFrameGetVisibleStringRange(rect).length

将返回字符串中的下一个文本应该开始的位置.

我的问题是:“给定一个归因的字符串和一个宽度,我需要什么rect height来完全绑定归因的字符串?”

CoreText框架是否提供了这样的工具?

谢谢,
道格

解决方法

你需要的是 CTFramesetterSuggestFrameSizeWithConstraints(),你可以这样使用它:
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)(attributedString)); /*Create your framesetter based in you NSAttrinbutedString*/
CGFloat widthConstraint = 500; // Your width constraint,using 500 as an example
CGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(
   framesetter,/* Framesetter */
   CFRangeMake(0,text.length),/* String range (entire string) */
   NULL,/* Frame attributes */
   CGSizeMake(widthConstraint,CGFLOAT_MAX),/* Constraints (CGFLOAT_MAX indicates unconstrained) */
   NULL /* Gives the range of string that fits into the constraints,doesn't matter in your situation */
);
CGFloat suggestedHeight = suggestedSize.height;

编辑

//IMPORTANT: Release the framesetter,even with ARC enabled!
CFRelease(frameSetter);

As ARC releases only Objective-C objects和CoreText处理C,很有可能在这里有一个内存泄漏.如果你的NSAttributedString很小,你做了一次,你不应该有任何不良后果.但是在一个例子中,你有一个循环可以计算出来,大概/复杂的NSAttributedStrings的高度是50个高度,你不会释放CTFramesetterRef,你可以有严重的内存泄漏.检查链接的教程,了解有关内存泄漏和仪器调试的更多信息.

所以解决这个问题的方法添加CFRelease(frameSetter);

原文链接:https://www.f2er.com/iOS/336182.html

猜你在找的iOS相关文章