为什么我输入字符时我的NSTextField的intrinsicContentSize没有改变?

时间:2015-02-26 15:47:32

标签: cocoa autolayout nstextfield

我正在尝试实现一个自定义NSTextField,可以在文本添加到NSTextField时水平调整大小(不包装文本)。内容压缩阻力优先级属性应该能够帮助上面(我已经设置为1000),但实际上没有任何效果。

这让我想到了我的问题标题:我在自定义intrinsicContentSize的重写keyUp()方法中调用了NSTextField,但它显示intrinsicContentSize没有变化 - 我非常确定,要使内容压缩阻力起作用,它需要更改intrinsicContentSize

修改

正如肯·托马斯在下面指出的那样,NSTextField没有固有的宽度,所以当我输入更多字符时,我不应该期望它会改变。下面是我添加的代码,以便进行更改:

override var intrinsicContentSize:NSSize{
    return NSMakeSize(self.attributedStringValue.size.width + 20, 20)
}

override func textDidChange(notification: NSNotification) {
    super.textDidChange(notification)
    self.invalidateIntrinsicContentSize()
}

1 个答案:

答案 0 :(得分:3)

除非您尝试更改默认行为,否则可编辑文本字段不具有固有宽度。也就是textField.intrinsicContentSize.width == NSViewNoInstrinsicMetric。这是因为当文本字段可编辑时,其内容不是内在的,它是外在的。