【问题标题】:Layout subviews in TableViewCell without adding to NSTableView在 TableViewCell 中布局子视图而不添加到 NSTableView
【发布时间】:2014-06-27 19:46:17
【问题描述】:

我有一个 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 框架始终为零。单元格是否需要超级视图来进行布局?或者还有什么遗漏?

【问题讨论】:

    标签: cocoa nstableview nslayoutconstraint


    【解决方案1】:

    这成功了:

       [taskCell layoutSubtreeIfNeeded];
    

    【讨论】:

      猜你喜欢
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多