NSTextField
含まれるテキストに応じて高さが変わるサブクラスを作成しました。別のビュー ( 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 のダミーセルの高さを返します。
問題は、「fittingSize」メソッドがそのサブビューのサイズをどのように把握するかです。「fittingSize」または「ntrinsicContentSize」メソッドを呼び出す必要がありますか、それとも別のものですか?