计算NSTextField所需的固定宽度

时间:2016-09-02 12:20:18

标签: macos cocoa osx-mavericks nstableview nstextfield

我正在使用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;

在请求单元格高度的函数中,我只使用相同的计算函数并返回高度。

任何人都可以建议我正确的方法来计算文本字段的高度。

0 个答案:

没有答案