2014-09-12 18 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上,我懷疑這是系統框架中的一個錯誤。