我正在尝试构建一个类似于事物布局的NSTableView
。
我认为他们正在使用NSTableView
使用自定义绘制的NSTableCell
- 或者它可能是NSSegmentedControl
。我试图沿着NSTableCell
路线走下去。我试图继承NSTableCellView
并绘制一个自定义单元格(这是在init方法中进行测试);
- (id)init {
self = [super init];
if (self) {
_checkbox = [[NSButton alloc] init];
[_checkbox setButtonType:NSSwitchButton];
_textview = [[NSTextView alloc] init];
[self addSubview:_checkbox];
[self addSubview:_textview];
[self setTranslatesAutoresizingMaskIntoConstraints:NO];
NSDictionary *views = NSDictionaryOfVariableBindings(_checkbox, _textview);
[self addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_checkbox]-[_textview]|"
options:0
metrics:nil
views:views]];
}
return self;
}
@end
似乎很容易理解,但它实际上并不起作用。我无法满足约束的错误。是否无法在子类NSTableCellView
中使用自动布局?
答案 0 :(得分:3)
虽然你必须向表视图控制器引入一些额外的代码,但是可以这样做:
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
NSTableCellView *rowView = [self.tableView makeViewWithIdentifier: RVIssueSelectionTableRowViewContentKey owner: self];
[rowView setObjectValue: yourDataObject]; // or update your cell with the according data the way you prefer
[rowView setNeedsLayout: YES];
[rowView layoutSubtreeIfNeeded];
return [rowView fittingSize].height;
}
这将导致单元格更新它的布局,您可以返回所需的高度。因为这个调用可能有点贵,所以应该缓存计算的单元格高度。 这个答案来自另一个我现在找不到的SO答案(当我找到它时会更新解决方案)。 生成约束的错误消息是因为您强制单元格的高度为x(通过表视图数据源方法)。但是你的约束想要设置单元格的高度以使它们满意。两者同时都无法发挥作用。