Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动调整NSButton的大小以适应以编程方式更改的文本(Xcode)_Xcode_Cocoa_Macos_Interface Builder_Nsbutton - Fatal编程技术网

自动调整NSButton的大小以适应以编程方式更改的文本(Xcode)

自动调整NSButton的大小以适应以编程方式更改的文本(Xcode),xcode,cocoa,macos,interface-builder,nsbutton,Xcode,Cocoa,Macos,Interface Builder,Nsbutton,我有一个NSButton(按钮),在Interface Builder/Xcode中内置了一些临时标题文本。在其他地方,按钮内的标题文本以编程方式更改为未知长度的字符串(实际上,多次更改为许多不同的长度) 我希望自动调整按钮的大小(具有固定的右侧位置——因此它会向左延伸),以适应以编程方式插入为按钮文本的字符串的长度。但我想不出来。有什么建议吗?提前谢谢 当然!就用吧!:) 如果您不能按照@jtbandes的建议使用自动布局(它仅在Lion中可用),那么您可以在设置其字符串值后调用[button

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


我希望自动调整按钮的大小(具有固定的右侧位置——因此它会向左延伸),以适应以编程方式插入为按钮文本的字符串的长度。但我想不出来。有什么建议吗?提前谢谢

当然!就用吧!:)

如果您不能按照@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

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

My fault;我应该说得更清楚些。如何在10.6(及更早版本)中实现此功能?@jtbandes如何使用autolayout实现此功能?@Jai启用autolayout后,按钮将自动尝试正确大小。你只需要告诉它还有什么地方——在OP的例子中,这意味着要约束它的右(后缘)边缘和superview对齐。。这就是我被困的地方。如果按钮的右后缘与其superview对齐,按钮是否会随着superview的大小而增长。我想知道如何将按钮设置为文本大小。抱歉,如果我没有正确理解,如果按钮的右边缘与superview对齐,但左边缘未受限制,则它将适合其文本大小并保持右对齐。该方法的更合适名称为
SetString GValueandSizeToFit:
。当然,但是我预计子类将被称为类似
RKSizeToFitButton
的东西,并且您根本不需要更改代码,它将成为
NSButton
的替代品。毕竟,OP需要一种自动的方法来实现这一点。