Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么NSTextField只显示第一个单词_Objective C_Macos_Nstextfield - Fatal编程技术网

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

Objective c 为什么NSTextField只显示第一个单词,objective-c,macos,nstextfield,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

在视图中包含
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];
结果是:

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

有什么想法吗


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

您可以尝试以下操作,而不是自己测量文本的大小:

[label setStringValue:str];
[label sizeToFit];
[label setNeedsDisplay:YES];

NSTextField
继承了
NSControl
的方法,该方法将自动将文本字段调整为适当大小。

尝试增加宽度。在XCode中,运行应用程序,然后转到调试/查看调试/显示图幅。这将直观地显示所有视图的大小。是的,你是对的。它现在工作得很好。非常感谢你。