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中,运行应用程序,然后转到调试/查看调试/显示图幅。这将直观地显示所有视图的大小。是的,你是对的。它现在工作得很好。非常感谢你。