我有一个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框始终为零。单元格是否需要超视图来进行布局?或者还有什么可以遗漏?
答案 0 :(得分:0)
这就是诀窍:
[taskCell layoutSubtreeIfNeeded];