我正在尝试获取一个属性字符串的rect,但是boundingRectWithSize调用没有考虑到我传入的大小,并且返回一个单行高度的rect,而不是一个很大的高度(它是一个很长的字符串)。我在下面的代码中尝试了传入一个非常大的高度值和0,但返回的rect总是相同的。
CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
options:NSStringDrawingUsesDeviceMetrics
context:nil];这是不是坏了,或者我需要做一些其他的事情来让它返回一个包装文本的rect?
发布于 2014-09-20 03:31:27
经过长时间的调查,我的最终决定是:
- boundingRectWithSize函数仅返回连续字符序列的正确大小!如果字符串包含空格或其他东西(被Apple称为“一些字形”)-不可能获得显示文本所需的rect的实际大小!
我已经用字母替换了字符串中的空格,并立即得到了正确的结果。
苹果在这里说:https://developer.apple.com/documentation/foundation/nsstring/1524729-boundingrectwithsize
此方法返回字符串中字形的实际边界。允许某些字形(例如,空格)与传入的大小指定的布局约束重叠,因此在某些情况下,返回的CGRect的大小组件的宽度值可能会超过大小参数的宽度值。
因此,有必要找到另一种方法来计算实际的rect。
经过漫长的调查过程,终于找到了解决方案!我不确定它是否适用于所有与UITextView相关的案例,但主要和重要的事情被检测到了!
当使用正确的矩形时,boundingRectWithSize函数以及CTFramesetterSuggestFrameSizeWithConstraints (和许多其他方法)将计算出正确的大小和文本部分。例如,当在UITextView上绘制文本时,UITextView具有textView.bounds.size.width,并且该值不是系统使用的实际矩形。
我找到了非常有趣的参数,并用代码进行了简单的计算:
CGFloat padding = textView.textContainer.lineFragmentPadding;
CGFloat actualPageWidth = textView.bounds.size.width - padding * 2;魔术作品-我所有的文本现在都计算正确了!享受吧!
https://stackoverflow.com/questions/13621084
复制相似问题