TableViewCell中的布局子视图,无需添加到NSTableView

时间:2014-06-27 19:46:17

标签: cocoa nstableview nslayoutconstraint

我有一个NSTableViewCell的子类,里面有几个控件,我需要其中一个控件的宽度来计算行的高度。

由于不允许从tableView:heightOfRow获取单元格,我需要计算高度,同时考虑单元格内的textField的宽度和该行中的字符串。

我想我会创建一个静态单元格,给它一个具有当前宽度的框架,并使其计算并执行其布局,并获得textField宽度的最终宽度。

这是代码,它应该让我获得“nameTextField”的宽度

    +(float)nameTextFieldWidthForTaskTableType:(TaskTableType )type compactSize:(BOOL)compactSize totalCellWidth:(float)totalWidth{
    static TaskCellView *taskCell = nil;
    if (taskCell == nil) {
        taskCell = [[TaskCellView alloc]initWithCompactSize:compactSize taskTableType:type identifier:@"notUsed"];
    }

    if (taskCell.frame.size.width != totalWidth) {
        taskCell.frame = NSMakeRect(0, 0, totalWidth, 25);
        [taskCell updateConstraints];

    }

    NSTextField *nameTextField = [taskCell viewForComponent:kTaskCellComponentName];
    return nameTextField.frame.size.width;

}

单元格子视图是基于约束的。他们工作正常。但是在这里,nameTextField框始终为零。单元格是否需要超视图来进行布局?或者还有什么可以遗漏?

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

   [taskCell layoutSubtreeIfNeeded];