2012-11-15 130 views
1

我有NSTextField,但我必須顯示的內容不固定,它會動態增長。 有什麼方法可以通過我們可以動態改變大小的簡單方法。 在此先感謝:)如何在NSTextField內容增加時調整NSTextField的尺寸

+0

這個問題已經被問了很多次......所以之前posting-首先做一些搜索和研究。 –

+0

是的anoop,有這麼多的解決方案,但都通過代碼。在我的問題中,我問過在界面生成器中是否有任何設置,而不是通過代碼計算和設置。 –

+0

你還沒有提到任何有問題的IB!在IB它不在那裏。 –

回答

1

文本字段的委託需要隨文本更改更新大小。

訣竅是,你必須手動更新stringValue財產,以避免錯誤:

override func controlTextDidChange(obj: NSNotification) { 
    guard let field = obj.object as? NSTextField else { 
    return 
    } 

    // re-apply the string value, this is necessary for the text field to correctly calculate it's width 
    field.stringValue = field.stringValue 

    // calculate the new dimensions 
    let maxWidth: CGFloat = 500 
    let maxHeight: CGFloat = 50 
    let size = renameField.sizeThatFits(NSSize(width: maxWidth, height: maxHeight)) 

    // apply them 
    field.frame = NSRect(x: field.frame.origin.x, y: field.frame.origin.y, width: size.width, height: size.height) 
} 
-1

沒有選項通過Interface Builder進行設置。

但是你可以通過代碼做: 您可以在其中實現

- (void)controlTextDidChange:(NSNotification *)aNotification; 

每次委託被調用調整按照上述您的想法控制的NSTextField設定的委託。

另外,這一個。

有傑裏·Krinock上的NSString/NSAttributedString很大的範疇,它允許您根據其寬度,反之亦然計算文本的高度:

http://www.sheepsystems.com/sourceCode/sourceStringGeometrics.html

編輯2016年3月

現在Autolayout功能可以幫助Mac OS應用程序增加和減少文本字段的大小,甚至NSWindow,因此您可以使用它們,非常容易使用。只需從窗口兩側放入約束,並將約束設置爲(> = desiredMinimumSize)即可完成!

+0

正在編輯文本字段時調整其大小無法正常工作,它似乎將字段置於損壞狀態,無法再正確繪製字段。使文本字段變小几乎可以工作,但增加字號可以完全破解它。 –

+0

@AbhiBeckert:現在即使是IB,你也可以通過Autolayout來實現這一點。我更新了答案。 –

+0

你試過了嗎?我無法使它與測試項目一起工作。你確定你明白這個問題嗎?這個想法是增加現場的寬度以適應用戶輸入的任何內容。 –

0

如果你只是顯示內容,而不是在文本框中輸入內容,那麼你應該使用一個標籤,它可以在IB中設置爲「尺寸適合內容」。這會使標籤對於內容來說足夠大。

相關問題