2012-01-28 68 views
2

我想讓我的NSWindow autoresizable。我已經獲得了大部分UI項目的大小調整,但構成問題的少數剩餘對象之一是NSTextViews:事實上,一旦NSTextView被調整大小,我無法找到計算新字體大小的方法。自動調整NSTextView和它的字體大小

對於NSTextFields,我找到了一種可以根據文本長度查找字體大小的方法。顯然,似乎沒有多行文本容器的等效方法(除非我沒有找到它)。

的唯一實際的地方,我發現mentionned之類的東西就在這裏:http://boutcher.tumblr.com/post/7842216960/nstextview-auto-resizing-text

但是,我沒能實現這個代碼到我的應用程序,因爲似乎是一個錯誤我不能修復創建NSLayoutManager的方式。

過去有沒有人這樣做過?我正在考慮只允許用戶調整到只是一個尺寸,所以我可以硬編碼的字體大小......這是一個真正的痛苦與這些NSTextViews處理!

回答

1

看到sizeWithAttributes:法「的NSString應用套件附加參考。」

它返回一個NSSize,你可以比較TextView的當前frame.size。

對於「屬性」arg用NSFont作爲對象創建一個NSDictionary,並以NSFontAttributeName爲關鍵字。 (不要被這個常量弄糊塗,它看起來像是一個字符串的關鍵字,但它不是;它是字體本身的關鍵字。)

從textview獲取字符串:[[yourTextView textStorage] string]。 獲取您正在使用的字體的familyName和它的當前磅值,一個CGFloat。使用構造函數[NSFont fontWithName:familyName size:floatChanged]組合字體進行測試。

一旦你到達正確大小的字體,使用它來創建一個新的NSAttributedString舊字符串。只需使用上面製作的「屬性」字典(生成正確大小的字典)並將其提供給NSAttributedString的構造函數initWithString:attributes

將屬性字符串賦值給textStorage(它自己是NSMutableAttributedString的子類):[[yourTextView textStorage] setAttributedString:thatYouJustMade]

注意:如果textview使用下劃線或前/背景着色等屬性或斜體/粗體字體,則必須從textStorage中獲取該信息並將其合併到新的屬性字符串中。這是可行的。查看NSAttributedString和NSMutableAttributedString的類參考。

+0

我決定採取不同的方式,但您的解決方案非常精確! – elliottbolzan 2012-01-30 01:51:04