为什么当我输入字符时,我的 NSTextField 的内在内容大小没有改变?

Sam*_*Sam 2 cocoa nstextfield autolayout

我正在尝试实现一种自定义NSTextField,当文本添加到NSTextField. 内容压缩阻力优先级属性应该能够帮助解决上述问题(我已将其设置为 1000),但它实际上没有任何效果。

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

编辑

正如肯·托马斯(Ken Thomas)在下面指出的那样,NSTextField没有固有的宽度,所以我不应该期望它会随着我输入更多字符而改变。下面是我添加的代码以使其更改:

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

override func textDidChange(notification: NSNotification) {
    super.textDidChange(notification)
    self.invalidateIntrinsicContentSize()
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ses 5

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