【问题标题】:NSTextField without margin?NSTextField 没有边距?
【发布时间】:2013-02-28 20:04:43
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c cocoa nsstring nstextfield


    【解决方案1】:

    您是否尝试过仅使用NSTextField 继承自NSControlsizeToFit?我在这里的一个测试项目中尝试过,它似乎工作正常。

    例如:

    [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 x 10 像素。在设置了字段的几个属性使其相当于标准的 13pt 标签之后,我将字符串值设置为一个很长的字符串,这显然不适合仅 10 px 的空间。设置字符串值后,日志调用显示文本字段的框架仍然是相同的 10 x 10 尺寸。然后我调用[labelField sizeToFit],如您所见,第二个日志调用显示文本字段已将其自身调整为理想大小。您应该能够在计算放置文本字段的位置时使用此大小。

    【讨论】:

    • 问题是我正在计算预先放置字符串的位置。边距是正确计算的一个问题。理想情况下,我只想要没有边距。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 2023-03-10
    • 2019-01-09
    • 2010-11-17
    • 2016-07-19
    • 2021-10-11
    相关资源
    最近更新 更多