我使用此代码来衡量NSAttributedString
的大小。
static NSStringDrawingOptions const OPTS = NSStringDrawingUsesLineFragmentOrigin
| NSStringDrawingUsesFontLeading
;
CGRect b1 = [text boundingRectWithSize:targetSize options:(OPTS) context:nil];
这通常效果很好,但有时候会显示不正确的结果。相同属性文本对象的结果大小比使用UITextView
实际呈现的大约小10pt,并且我无法为文本视图选择正确的大小。
相同的代码适用于模拟器,但在实际设备中有所破坏。为什么会这样,我该怎么做才能避免这种情况?
测试环境:
答案 0 :(得分:0)
就我而言,我构建了NSAttributedString
没有属性。甚至没有NSFontAttributeName
字段。在这种情况下,根据手册,系统将选择预定义的默认字体 - “Helvetica,12pt”。
但似乎操作系统正在为环境中的方法选择一些不同的(这是错误的)大小的字体。也许是因为日语模式。无论如何,UITextView
渲染例程使用另一种字体,因此,测量的大小与渲染大小不同。
要避免这种情况,只需在属性字符串中为每个字符明确设置字体。
在明确指定所有字符的字体后,我确认我拥有的所有设备和Xcode 6中的模拟器都能正常工作。我相信如果我没有设置一些与度量相关的属性,可能会出现更奇怪的情况。然后我建议始终设置所有度量标准属性。
我不确定在其他环境中会发生什么,但我的情况已经解决了。我希望这会有所帮助。
<强>更新强>
即使应用此解决方案后,我也会再次出现同样的问题。此解决方案不提供正确的补丁。无论如何,这个问题从未出现在iOS 8.0上,我怀疑这是系统框架中的一个错误。