我有NSTextField,但我必须显示的内容不固定,它会动态增长。 有没有办法以简单的方式动态改变大小。 在此先感谢:)
答案 0 :(得分: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 :(得分:0)
如果您只是显示内容,而不是在文本字段中输入内容,那么您应该使用一个标签,该标签可以在IB中设置为"尺寸适合内容"。这将导致标签对于内容来说足够大。
答案 2 :(得分:-1)
没有选项可以通过Interface Builder进行设置。
但是你可以通过代码: 您可以在实现
的NSTextField上设置委托- (void)controlTextDidChange:(NSNotification *)aNotification;
每次调用委托时,都会按照上面的想法调整控件的大小。
另外,这个。
Jerry Krinock在NSString / NSAttributedString上有一个很棒的类别,允许你根据文本的宽度来计算文本的高度,反之亦然:
http://www.sheepsystems.com/sourceCode/sourceStringGeometrics.html
2016年3月编辑:
现在,作为Mac OS应用程序的Autolayout功能有助于增加和减少文本字段甚至NSWindow的大小,因此您可以非常容易地使用它们。只需从Window的任一侧放置约束,并将约束设置为(> = desiredMinimumSize),就完成了!