我创建了一个NStextField
扩展和收缩以适应文本变化的子类。这是代码:
- (NSSize)sizeToFitContent
{
NSRect frame = [self frame];
CGFloat width = frame.size.width;
frame.size.height = CGFLOAT_MAX;
CGFloat height = [self.cell cellSizeForBounds: frame].height;
return NSMakeSize(width, height);
}
- (void)textDidChange:(NSNotification *)aNotification
{
[super textDidChange:aNotification];
[(NSCell *)self.cell title];
NSSize newSize = [self sizeToFitContent];
if (newSize.height != self.frame.size.height) {
[self invalidateIntrinsicContentSize];
}
}
- (NSSize)intrinsicContentSize
{
if ( ![self.cell wraps] ) {
return [super intrinsicContentSize];
}
return [self sizeToFitContent];
}
我已经验证了该控件在几个项目中执行了我希望它执行的操作。最近我试图将控件放在 a 中NSTableCellView
,但它停止了工作。如果我以编程方式设置控件的 stringValue,则控件会正确更改其大小。但是,如果我从控件中键入或删除文本,它不会在需要换行时调整大小。我真的无法弄清楚为什么控件在这两种情况下的行为不同?