2014-09-12 35 views
0

我使用此代码来测量NSAttributedString的大小。平台上的NSAttributedString的不同文本边界

static NSStringDrawingOptions const OPTS = NSStringDrawingUsesLineFragmentOrigin 
              | NSStringDrawingUsesFontLeading 
              ; 

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

这通常运作良好,但有时它有时会显示不正确的结果。相同的归因文本对象的结果大小比实际使用UITextView呈现的结果大小要小10pt,并且我无法为文本视图选择正确的大小。

相同的代码可以很好的与模拟器一起使用,但是在实际的设备中却出现了问题。为什么发生这种情况,我能做些什么来避免这种情况?

测试环境:

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

回答

0

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

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

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

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

我不确定在其他环境中会发生什么,但我的情况已经解决了。我希望这有帮助。即使在应用该解决方案后,再次出现


更新

我同样的问题。此解决方案不提供正确的修补程序。无论如何,这个问题永远不会出现在iOS 8.0上,我怀疑这是系统框架中的一个错误。