如果我拖动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