14

我有一个 NSButton(按钮),在 Interface Builder / Xcode 中内置了一些临时标题文本。在其他地方,按钮内的标题文本以编程方式更改为未知长度的字符串(实际上,多次更改为许多不同的长度)。

我希望按钮自动调整大小(具有固定的右侧位置 - 因此它向左增长)以适合任何长度的字符串作为按钮文本以编程方式插入。但我无法弄清楚。有什么建议么?提前致谢!

4

2 回答 2

16

如果您不能按照@jtbandes 的建议使用自动布局(它仅在 Lion 中可用),那么您可以[button sizeToFit]在设置其字符串值后调用,这将使按钮调整大小以适合其字符串。然后,您需要根据新宽度调整其框架。

您不能自动执行此操作,但在NSButton.

@implementation RKSizeToFitButton
- (void)setStringValue:(NSString*)aString
{
    //get the current frame
    NSRect frame = [self frame];

    //button label
    [super setStringValue:aString];

    //resize to fit the new string
    [self sizeToFit];

    //calculate the difference between the two frame widths
    NSSize newSize = self.frame.size;
    CGFloat widthDelta = newSize.width - NSWidth(frame);
    //set the frame origin
    [self setFrameOrigin:NSMakePoint(NSMinX(self.frame) - widthDelta, NSMinY(self.frame))];
}
@end

这样,您只需RKSizeToFitButton在 Interface Builder 中将按钮的类设置为,然后调用setStringValue:按钮更改其标签将“正常工作”而无需额外代码。

于 2011-08-27T05:03:24.300 回答
8

当然!只需使用自动布局!:)

于 2011-08-27T04:34:25.913 回答