如果我拖動Label
(的NSTextField
類)一個到在界面生成器的視圖,並且然後嘗試設置其stringValue
動態像這樣:的NSTextField標籤:動態地改變的內容和增長寬度以適應
self.testingLabel.stringValue = "Labels are really really really long"
然後大部分標籤將被切斷。
我怎樣才能使標籤成長,以適應不包裝/滾動它的內容?
我試過使用這個自定義類,但它不起作用。
class AutogrowTextField: NSTextField {
override var intrinsicContentSize: NSSize {
get {
var frame = self.frame;
frame.size.width = CGFloat.max;
// Calculate new height within the frame
// with practically infinite height.
let width = self.cell!.cellSizeForBounds(frame).width
Swift.print(width)
NSBeep()
Swift.print(self.frame.width)
return NSMakeSize(width, frame.size.height)
}
}
// you need to invalidate the layout on text change, else it wouldn't grow by changing the text
override func textDidChange(notification: NSNotification) {
super.textDidChange(notification)
self.invalidateIntrinsicContentSize()
}
}
基本上我只想一個HTML文檔的這樣的默認行爲:
<p id="dynamic">Hi</p>
<script>
document.getElementByID("dynamic").innerHtml = "Something really really really long"
</script>
因爲雖然我是新來的Mac OS X和可可這對我來說是非常痛苦的,我不是'初學者'程序員。
在這裏有幫助的是屬性檢查器的內容。 (這應該只是所有默認值)
是的,自動佈局啓用
是自動佈局已啓用,我沒有添加任何約束。你確定它會默認增長嗎?我認爲這是默認情況下剪裁/包裝/粘貼到原始大小。我並沒有想象這會讓它變得越來越難。 – neon64
您使用的是哪種版本的Xcode?另外,嘗試爲超級視圖(而不是其他人)添加約束條件,例如,超前視圖和頂部間距。您也可以嘗試將標籤的「佈局」屬性設置爲截斷並啓用「使用單線模式」。 –
啊哈!所以我認爲默認情況下,自動佈局假定'沒有約束'真的意味着'固定位置/所有東西都受到約束',所以只需要添加頂部和左側/前導約束,迫使引擎使底部/右側約束更加靈活?我必須承認我之前還沒有處理過自動佈局,因此閱讀它可能會有所幫助:P – neon64