gpt4 book ai didi

cocoa - NSView 中的自动布局用作 NSTableView 的单元格

转载 作者:行者123 更新时间:2023-12-03 16:14:27 25 4
gpt4 key购买 nike

我正在尝试构建一个类似于 Things 布局的 NSTableViewThings 2.0 -- (c) CulturedCode

我假设他们正在做的是使用带有自定义绘制的NSTableCellNSTableView——或者可能是一个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 中使用自动布局?

最佳答案

这是可能的,尽管您必须向 TableView Controller 引入一些额外的代码:

- (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;
}

这将导致单元格更新其布局,您可以返回其所需的高度。因为这个调用可能有点昂贵,所以您应该缓存计算出的像元高度。这个答案取自另一个我现在找不到的答案(当我找到它时将更新解决方案)。由于您强制单元格的高度为 x(通过 TableView 数据源方法),因此会生成约束的错误消息。但是您的约束想要设置单元格的高度,以便满足它们。两者不能同时工作。

关于cocoa - NSView 中的自动布局用作 NSTableView 的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21978256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com