如果我将Label
(类NSTextField
)拖到Interface Builder中的视图中,然后尝试动态设置其stringValue
:
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和Cocoa的新手,我不是初学者&#39;程序员。
如果有帮助,这里是属性检查器的内容。 (它应该只是所有默认值)
是,已启用自动布局
答案 0 :(得分:0)
您确定您的NIB或情节提要配置为使用自动布局吗?这将是文件检查器上的复选框。
我问的原因是属性检查器将具有&#34;首选宽度_第一运行时布局宽度&#34;复选框,紧靠&#34;使用单线模式&#34;复选框。它没有,这让我觉得自动布局没有启用。
如果您没有使用自动布局,那么您有责任设置标签的框架尺寸,或者更简单地说,通过调用sizeToFit()
告诉它调整自身大小以适应其内容
如果您使用自动布局,则标准NSTextField
已根据其字符串内容计算其intrinsicContentSize
。几乎可以肯定的是,您可能在视图上设置了其他任何约束。您需要确保自动布局系统可以自由调整标签的宽度。因此,您不能设置显式宽度约束。或者,如果您有前导和尾随间距约束,则需要确保标签的抗压优先级足够高,以推送其他相关视图或压缩它们。等