2010-03-13 82 views
5

我想知道屏幕上顯示的NSString的寬度(以像素爲單位)。所以我可以將NSTextField的邊界與字符串本身的長度完全吻合。所以我使用了IB的「標籤」NSTextField,對於那些不知道我的意思的人,我得到了標題爲「標籤」的標籤,字體「Lucida Grande 13px」,不可選擇,不可編輯,常規尺寸,無背景和根據到IB它的寬度是38px寬。NSString sizeWithAttributes:不準確

如果我想獲得它的寬度編程我用

[@"Label" sizeWithAttributes: [NSDictionary dictionaryWithObject: [NSFont fontWithName: @"Lucida Grande" size: 13] forKey: NSFontAttributeName]].width 

哪位能給我33.293457。所以這是真正的寬度的5倍..

回答

0

這實際上聽起來是合理的。你正在比較兩種不同的寬度;原始字符串的寬度與包含在NSTextField中的字符串的寬度。包含的字符串在任何一端都可能只有一點填充,除了其他細微的差別。

+0

可能是,但高度是正確的,在逗號後面有6位數字......在做了一些測試後,它看起來總是比原來的尺寸小5px ..這就是爲什麼我懷疑屬性有問題我不知道是什麼。即使傳遞正確的顏色,背景樣式,段落樣式,換行符模式和方向,也會得到相同的結果,大小減少5 px。 – Jef 2010-03-13 19:32:17

7

我相信你注意到的是控件的框架和它的佈局框架之間的區別。請參閱Frame vs Layout Frame以獲得很好的解釋。

您在計算寬度時做的是正確的事情。對於標籤,控件的頂部或底部沒有額外的填充,這就是爲什麼您看不到控件高度的問題。但是,在控件的左側和右側還有三個像素。這可以通過查看IB中的標籤控件的框架和佈局來驗證。

所以,你注意到的〜5像素實際上恰好是6.一旦你考慮到這個填充,你應該沒有更多的麻煩。

不幸的是,沒有API來確定各種控件的填充是什麼(按鈕每邊有6個像素)。我建議在http://bugreport.apple.com處提交錯誤報告 - 蘋果公司基於它們提供的API數量來確定其提供的API的一部分。雖然IB會告訴你,但你需要自己編寫這些值。如果他們在下一個操作系統版本中更改,則需要更新您的應用程序。