为什么NSTextField只显示第一个单词

时间:2014-05-20 15:12:38

标签: objective-c macos nstextfield

当我在视图中包含NSTextField时,添加的数据未完全显示。当相同的配置应用于添加.xib的NSTextField时,文本将完全显示。

以下是代码:

// Generated programmatically
NSTextField *label = [[NSTextField alloc] initWithFrame:self.bounds];
[label setBezeled:NO];
[label setDrawsBackground:NO];
[label setEditable:NO];
[label setSelectable:NO];
label.alignment = NSCenterTextAlignment;
label.backgroundColor = [NSColor clearColor];
label.textColor = [NSColor redColor];
label.font = [NSFont boldSystemFontOfSize:16.f];
[label setStringValue:str];
[self addSubview:label];


NSSize s3 = [str sizeWithAttributes:@{NSFontAttributeName:label.font}];
NSLog(@"S3 size: %f", s3.width);
[label setFrameSize:s3];

结果如下:

Black text is the label configured in xib file. White text is the label created in xib file and configured programmatically. Red text is the label created and configured programmatically

黑色文本是xib文件中配置的标签。白色文本是在xib文件中创建并以编程方式配置的标签。红色文本是以编程方式创建和配置的标签

有什么想法吗?

代码可用here

1 个答案:

答案 0 :(得分:1)

使用NSString的{​​{1}}仅计算文本字符串本身的大小。 sizeWithAttributes:及其NSTextField本身也需要一些空间来处理他们的绘图部分。因此,当您将单元格大小设置为单独文本的大小时,单元格太小而无法绘制所有文本,因此文本会被截断。

您可以尝试:

,而不是尝试自己测量文本的大小
NSTextFieldCell

[label setStringValue:str]; [label sizeToFit]; [label setNeedsDisplay:YES]; 继承了NSTextField的{​​{3}}方法,该方法会自动将文本字段调整为适当的大小。