我有 NSTextField 但我必须显示的内容不是固定的,它会动态增长。有什么简单的方法可以让我们动态改变大小。提前致谢 :)
问问题
2446 次
3 回答
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)
}
于 2016-03-29T08:30:00.433 回答
0
没有通过 Interface Builder 设置的选项。
但是你可以通过代码来做:你可以在实现的 NSTextField 上设置一个委托
- (void)controlTextDidChange:(NSNotification *)aNotification;
每次调用委托时,根据您上面的想法调整控件的大小。
还有,这个。
Jerry Krinock 的 NSString/NSAttributedString 上有一个很棒的类别,它允许您根据文本的宽度计算文本的高度,反之亦然:
http://www.sheepsystems.com/sourceCode/sourceStringGeometrics.html
2016 年 3 月编辑:
现在,由于 Mac OS 应用程序的 Autolayout 功能有助于增加和减小文本字段甚至 NSWindow 的大小,因此您可以非常容易地使用它们。只需从窗口的任一侧放置约束,并将约束设置为 ( >= desiredMinimumSize ),就完成了!
于 2012-11-15T06:23:23.987 回答
0
如果您只是显示内容,而不是在文本字段中输入,那么您应该使用一个标签,该标签可以在 IB 中设置为“Size To Fit Content”。这将导致标签足够大以容纳内容。
于 2012-11-16T23:21:48.437 回答