【问题标题】:Autolayout in an NSView being used as a cell for NSTableViewNSView 中的自动布局被用作 NSTableView 的单元格
【发布时间】:2014-03-25 13:18:33
【问题描述】:

我正在尝试构建一个类似于 Things 的布局方式的 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 中使用自动布局吗?

【问题讨论】:

  • ..视图单独使用时是否有效?它在 Xcode 的 IB 编辑器中是否给出任何警告?
  • 当然,您可以通过电子邮件发送给事物的制造者并询问他们。他们可能会告诉你。

标签: cocoa nstableview nstableviewcell nstablecellview


【解决方案1】:

这是可能的,尽管您必须向表格视图控制器引入一些额外的代码:

- (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(通过表视图数据源方法)。但是您的约束想要设置单元格的高度以便满足它们。两者不能同时工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    相关资源
    最近更新 更多