2013-02-28 101 views
0

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

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

回答

0

您是否尝试过只用sizeToFitNSTextField继承NSControl?我在一个测试项目中尝试了它,它似乎工作正常。

例如:

[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}} 

在该代码中,我只用10个像素的通过任意初始帧大小创建的NSTextField 10个像素。设置字段的几个属性,使其等价于一个标准的13pt标签后,然后将字符串值设置为一个很长的字符串,这显然不适合只有10 px值的空间。设置字符串值后,日志记录调用将显示文本字段的框架仍为相同的10 x 10尺寸。然后我打电话给[labelField sizeToFit],正如你所看到的那样,第二次日志记录调用显示文本字段已将其自身调整为理想大小。您应该能够在计算放置文本字段的位置时使用此大小。

+0

问题是我正在计算预先放置字符串的位置。正确计算这个裕度是一个问题。理想情况下,我只想要没有保证金。 – Wesley 2013-02-28 20:48:35

+0

@韦斯利:更新了答案... – NSGod 2013-02-28 23:51:25

+0

谢谢,有道理! – Wesley 2013-03-02 09:15:18