我的NSTextField與左,右和頂部約束定義(無底約束集)。如果內容不適合它,我需要增加NSTextField,如果還有未使用的空間,則需要減小大小。的NSTextField調整大小以適應內容
現在我有:用的NSTextField奇怪的行爲會自動擴展,如果它具有多行文字或內容太多,也的NSTextField不會對窗口大小調整降低自己的規模。
我還沒有發現寫在斯威夫特來解決這個問題(我有很多這樣的標籤與約束),在iOS的一切都與普通的文本標籤和制約工作的任何簡單的解決辦法。
我創建了這個問題簡單的項目,你可以看到這個問題:[Download Text.zip]
我發現,但不能使用的解決方案:
你可以嘗試計算可能的TextField高度併爲其設置高度限制。該解決方案的問題:
- 可能的高度計算不準確,有時您計算不正確的高度。
- 解決方案使用一些複雜的代碼寫在Objective-C上。
在每個窗口上運行.sizeToFit()調整大小或文本更改操作。它不工作,因爲.sizeToFit()總是將所有文本壓縮到單行。
使用NSTextView代替的NSTextField。這是好方法,但:
- 我不需要滾動,編輯和NSTextView的其他功能。我不想打電話給簡單標籤的複雜組件。
- NSTextView總是要高度或底部的約束,我不知道底部約束,因爲內容可以用新的文本向下展開。
- 我還沒有找到完整的解決方案,使NSTextView的行爲像我想:)
禁用第一個運行時佈局的寬度和與此TextField玩。needsLayout = true textField.needsUpdateConstraints = true textField.needsDisplay = true。我不知道如何強制更新NSWindow實時調整大小的視圖。所以一旦你調用addText,視圖不會展開。但它會正確重繪窗口大小。 –
@ xhruso00,如果我禁用第一運行時佈局NSTextField始終顯示爲1行。 needsLayout,needsUpdateConstraints,needsDisplay根本沒有效果(在我的測試中)。 – Vasily
點擊按鈕後你調整了窗口大小嗎?只有這樣視圖纔會刷新。如果你解決了重繪問題,它會像你想要的那樣運行,幾乎沒有代碼。 –