由平台绑定NSAttributedString的不同文本

时间:2014-09-12 14:52:37

标签: ios text

我使用此代码来衡量NSAttributedString的大小。

static NSStringDrawingOptions const OPTS    =   NSStringDrawingUsesLineFragmentOrigin
                                            |   NSStringDrawingUsesFontLeading
                                            ;

CGRect  b1  =   [text boundingRectWithSize:targetSize options:(OPTS) context:nil];

这通常效果很好,但有时候会显示不正确的结果。相同属性文本对象的结果大小比使用UITextView实际呈现的大约小10pt,并且我无法为文本视图选择正确的大小。

相同的代码适用于模拟器,但在实际设备中有所破坏。为什么会这样,我该怎么做才能避免这种情况?

测试环境:

  • iPod第5代
  • iOS 7.1.2
  • 日语模式。

1 个答案:

答案 0 :(得分:0)

就我而言,我构建了NSAttributedString没有属性。甚至没有NSFontAttributeName字段。在这种情况下,根据手册,系统将选择预定义的默认字体 - “Helvetica,12pt”。

但似乎操作系统正在为环境中的方法选择一些不同的(这是错误的)大小的字体。也许是因为日语模式。无论如何,UITextView渲染例程使用另一种字体,因此,测量的大小与渲染大小不同。

要避免这种情况,只需在属性字符串中为每个字符明确设置字体。

在明确指定所有字符的字体后,我确认我拥有的所有设备和Xcode 6中的模拟器都能正常工作。我相信如果我没有设置一些与度量相关的属性,可能会出现更奇怪的情况。然后我建议始终设置所有度量标准属性。

我不确定在其他环境中会发生什么,但我的情况已经解决了。我希望这会有所帮助。


<强>更新

即使应用此解决方案后,我也会再次出现同样的问题。此解决方案不提供正确的补丁。无论如何,这个问题从未出现在iOS 8.0上,我怀疑这是系统框架中的一个错误。