NSTextField没有保证金?

时间:2013-02-28 20:04:44

标签: objective-c cocoa nsstring nstextfield

有没有办法让NSTextField没有任何边距?我正在尝试将文本字段设置为与文本本身一样宽,但我必须添加一些随机的nr(10px)以使其全部显示。

NSSize size = [title sizeWithAttributes:[NSDictionary dictionaryWithObject:[NSFont fontWithName:@"LucidaGrande" size:fontSize] forKey:NSFontAttributeName]];

1 个答案:

答案 0 :(得分:0)

您是否尝试过仅使用NSTextField继承自NSControl的{​​{3}}?我在这里的测试项目中试过它,它看起来运行正常。

例如:

[textField sizeToFit];

[更新]:也许我不理解。您是否以编程方式创建显示文本或其他内容的文本字段?如果是这样,在将文本字段添加到视图层次结构之前,仍然可以使用sizeToFit使文本字段正确调整大小。例如,以下代码:

// this code sample assumes ARC
NSTextField *labelField = [[NSTextField alloc] initWithFrame:
                                  NSMakeRect(0.0, 0.0, 10.0, 10.0)];
[[labelField cell] setFont:[NSFont systemFontOfSize:[NSFont systemFontSize]]];
[labelField setBezeled:NO];
[labelField setDrawsBackground:NO];
[labelField setEditable:NO];
[labelField setSelectable:YES];

[labelField setStringValue:@"Sphinx of black quartz, judge my vow. Sphinx of black quartz, judge my vow."];

NSLog(@"labelField.frame (BEFORE) == %@", NSStringFromRect(labelField.frame));
NSLog(@"calling [labelField sizeToFit]");

[labelField sizeToFit];

NSLog(@"labelField.frame (AFTER) == %@", NSStringFromRect(labelField.frame));

labelField.frame = NSOffsetRect(labelField.frame, 50.0, 100.0);

[self.window.contentView addSubview:labelField];

运行此代码将产生以下记录的输出:

2013-02-28 17:23:21 SizeToFit[] labelField.frame (BEFORE) == {{0, 0}, {10, 10}}
2013-02-28 17:23:21 SizeToFit[] calling [labelField sizeToFit]
2013-02-28 17:23:21 SizeToFit[] labelField.frame (AFTER) == {{0, 0}, {493, 17}}

在这段代码中,我创建了一个NSTextField,其初始帧大小只有10像素乘10像素。在设置了字段的几个属性以使其等同于标准的13pt标签之后,我将字符串值设置为长字符串,这显然不适合仅10 px的空间。设置字符串值后,日志记录调用显示文本字段的框架仍然是相同的10 x 10维度。然后我调用[labelField sizeToFit],如您所见,第二次日志记录调用显示文本字段已将自身大小调整为理想大小。您应该能够在计算文本字段的位置时使用此大小。