当我在视图中包含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文件中创建并以编程方式配置的标签。红色文本是以编程方式创建和配置的标签
有什么想法吗?
代码可用here
答案 0 :(得分:1)
使用NSString
的{{1}}仅计算文本字符串本身的大小。 sizeWithAttributes:
及其NSTextField
本身也需要一些空间来处理他们的绘图部分。因此,当您将单元格大小设置为单独文本的大小时,单元格太小而无法绘制所有文本,因此文本会被截断。
您可以尝试:
,而不是尝试自己测量文本的大小NSTextFieldCell
[label setStringValue:str];
[label sizeToFit];
[label setNeedsDisplay:YES];
继承了NSTextField
的{{3}}方法,该方法会自动将文本字段调整为适当的大小。