我创建了一个子类NSTextField
,它根据它包含的文本改变它的高度。我现在想将它插入另一个视图(an NSTableCellView
)并根据文本字段的高度调整视图大小。
我想使用的-(NSSize)fittingSize
方法,NSView
但不幸的是它似乎没有调用fittingSize
它的子视图的方法,也没有调用它们的intrinsicContentSize
方法。
这是我用于NSTableCellView
子类的代码:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self setTranslatesAutoresizingMaskIntoConstraints:NO];
self.expandingTextField = [[JSExpandingTextField alloc] init];
[self addSubview:self.expandingTextField];
[self removeConstraints:self.constraints];
NSDictionary *row = NSDictionaryOfVariableBindings(expandingTextField);
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-20-[expandingTextField]-28-|"
options:0 metrics:nil views:row]];
}
return self;
}
- (NSSize)fittingSize
{
return [super fittingSize];
}
我在这里重写该fittingSize
方法只是为了放置一个断点或一个NSLog
.
这是提供表格单元格高度的表格视图委托的代码:
- (JSDynamicTableCellView *)dummyCell
{
if (!_dummyCell) {
_dummyCell = [[JSDynamicTableCellView alloc] initWithFrame:NSMakeRect(0.0, 0.0, 100, 100)];
}
return _dummyCell;
}
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
self.dummyCell.expandingTextField.stringValue = @"Test";
NSLog(@"Cell size %@",NSStringFromSize([self.dummyCell fittingSize]));
return [self.dummyCell fittingSize].height;
}
所有这些总是返回 69 的 dummyCell 高度,与单元格中扩展文本字段的大小无关。
问题是:“fittingSize”方法如何计算出其子视图的大小?它应该调用他们的“fittingSize”或“ntrinsicContentSize”方法还是别的什么?