我正在使用NSTextField来显示静态文本。我想知道文本字段对给定文本和固定宽度需要多少高度。此文本字段是NSTableCellView的子视图。我返回此表格视图单元格所需的高度,具体取决于文本字段所需的高度。
我使用以下方式计算文本字段的大小:
- (CGSize) computeCellViewTextLabelSize:(NSString *)mesgString forWidth:(CGFloat)width {
CGSize expectedLabelSize = CGSizeMake(0, 20);
if([mesgString length] > 0) {
NSTextField *textLabel = [[NSTextField alloc] initWithFrame:CGRectMake(0, 0, width, 0)];
[textLabel setFont:[NSFont systemFontOfSize:13.0f]];
[textLabel setStringValue:[NSString stringWithFormat:@"%@",mesgString]];
NSSize size = [((NSTextFieldCell *) [textLabel cell]) cellSizeForBounds:NSMakeRect(0, 0, width, FLT_MAX)];
expectedLabelSize = size;
}
return expectedLabelSize; }
但是有一个问题。我设置了此函数返回的文本字段的高度和宽度。我观察到文本字段的实际宽度大于我用于计算4个像素的宽度。因此,对于长消息,计算的高度超过了要求。这是我的假设,为什么显示的高度超过了要求。
在tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
函数中,我以编程方式设置文本字段的宽度
CGSize expectedLabelSize = [self computeCellViewTextLabelSize:cellView.textField.stringValue forWidth:ceil(tableViewWidth*0.6)];
cellView.textFieldWidthConstraint.constant = expectedLabelSize.width;
cellView.textField.preferredMaxLayoutWidth = expectedLabelSize.width;
在请求单元格高度的函数中,我只使用相同的计算函数并返回高度。
任何人都可以建议我正确的方法来计算文本字段的高度。